JSHandle
JSHandle represents an in-page JavaScript object. JSHandles can be created with the page.evaluateHandle() method.
const windowHandle = await page.evaluateHandle(() => window);
// ...
JSHandle prevents the referenced JavaScript object being garbage collected unless the handle is exposed with jsHandle.dispose(). JSHandles are auto-disposed when their origin frame gets navigated or the parent context gets destroyed.
JSHandle instances can be used as an argument in page.$eval(), page.evaluate() and page.evaluateHandle() methods.
方法 (Methods)
asElement
Added before v1.9Returns either null
or the object handle itself, if the object handle is an instance of ElementHandle.
使用方式
jsHandle.asElement();
傳回值
dispose
Added before v1.9The jsHandle.dispose
method stops referencing the element handle.
使用方式
await jsHandle.dispose();
傳回值
evaluate
Added before v1.9Returns the return value of pageFunction.
This method passes this handle as the first argument to pageFunction.
If pageFunction returns a Promise, then handle.evaluate
would wait for the promise to resolve and return its value.
使用方式
const tweetHandle = await page.$('.tweet .retweets');
expect(await tweetHandle.evaluate(node => node.innerText)).toBe('10 retweets');
參數
-
pageFunction
function | string#Function to be evaluated in the page context.
-
arg
EvaluationArgument (optional)#Optional argument to pass to pageFunction.
傳回值
evaluateHandle
Added before v1.9Returns the return value of pageFunction as a JSHandle.
This method passes this handle as the first argument to pageFunction.
The only difference between jsHandle.evaluate
and jsHandle.evaluateHandle
is that jsHandle.evaluateHandle
returns JSHandle.
If the function passed to the jsHandle.evaluateHandle
returns a Promise, then jsHandle.evaluateHandle
would wait for the promise to resolve and return its value.
See page.evaluateHandle() for more details.
使用方式
await jsHandle.evaluateHandle(pageFunction);
await jsHandle.evaluateHandle(pageFunction, arg);
參數
-
pageFunction
function | string#Function to be evaluated in the page context.
-
arg
EvaluationArgument (optional)#Optional argument to pass to pageFunction.
傳回值
getProperties
Added before v1.9The method returns a map with own property names as keys and JSHandle instances for the property values.
使用方式
const handle = await page.evaluateHandle(() => ({ window, document }));
const properties = await handle.getProperties();
const windowHandle = properties.get('window');
const documentHandle = properties.get('document');
await handle.dispose();
傳回值
getProperty
Added before v1.9Fetches a single property from the referenced object.
使用方式
await jsHandle.getProperty(propertyName);
參數
傳回值
jsonValue
Added before v1.9Returns a JSON representation of the object. If the object has a toJSON
function, it will not be called.
The method will return an empty JSON object if the referenced object is not stringifiable. It will throw an error if the object has circular references.
使用方式
await jsHandle.jsonValue();
傳回值