2021-01-07 11:46:05 -08:00
|
|
|
# class: JSHandle
|
|
|
|
|
|
|
|
JSHandle represents an in-page JavaScript object. JSHandles can be created with the [`method: Page.evaluateHandle`]
|
|
|
|
method.
|
|
|
|
|
|
|
|
```js
|
|
|
|
const windowHandle = await page.evaluateHandle(() => window);
|
|
|
|
// ...
|
|
|
|
```
|
|
|
|
|
|
|
|
JSHandle prevents the referenced JavaScript object being garbage collected unless the handle is exposed with [`method:
|
|
|
|
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 [`method: Page.$eval`], [`method: Page.evaluate`] and [`method:
|
|
|
|
Page.evaluateHandle`] methods.
|
|
|
|
|
|
|
|
## method: JSHandle.asElement
|
|
|
|
- returns: <[null]|[ElementHandle]>
|
|
|
|
|
|
|
|
Returns either `null` or the object handle itself, if the object handle is an instance of [ElementHandle].
|
|
|
|
|
|
|
|
## async method: JSHandle.dispose
|
|
|
|
|
|
|
|
The `jsHandle.dispose` method stops referencing the element handle.
|
|
|
|
|
|
|
|
## async method: JSHandle.evaluate
|
|
|
|
- returns: <[Serializable]>
|
|
|
|
|
|
|
|
Returns the return value of [`param: pageFunction`]
|
|
|
|
|
|
|
|
This method passes this handle as the first argument to [`param: pageFunction`].
|
|
|
|
|
|
|
|
If [`param: pageFunction`] returns a [Promise], then `handle.evaluate` would wait for the promise to resolve and
|
|
|
|
return its value.
|
|
|
|
|
|
|
|
Examples:
|
|
|
|
|
|
|
|
```js
|
|
|
|
const tweetHandle = await page.$('.tweet .retweets');
|
|
|
|
expect(await tweetHandle.evaluate((node, suffix) => node.innerText, ' retweets')).toBe('10 retweets');
|
|
|
|
```
|
|
|
|
|
|
|
|
### param: JSHandle.evaluate.pageFunction
|
2021-01-08 16:17:54 -08:00
|
|
|
* langs: js
|
2021-01-07 11:46:05 -08:00
|
|
|
- `pageFunction` <[function]>
|
|
|
|
|
|
|
|
Function to be evaluated in browser context
|
|
|
|
|
|
|
|
### param: JSHandle.evaluate.arg
|
|
|
|
- `arg` <[EvaluationArgument]>
|
|
|
|
|
|
|
|
Optional argument to pass to [`param: pageFunction`]
|
|
|
|
|
|
|
|
## async method: JSHandle.evaluateHandle
|
|
|
|
- returns: <[JSHandle]>
|
|
|
|
|
|
|
|
Returns the return value of [`param: pageFunction`] as in-page object (JSHandle).
|
|
|
|
|
|
|
|
This method passes this handle as the first argument to [`param: pageFunction`].
|
|
|
|
|
|
|
|
The only difference between `jsHandle.evaluate` and `jsHandle.evaluateHandle` is that `jsHandle.evaluateHandle` returns
|
|
|
|
in-page object (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 [`method: Page.evaluateHandle`] for more details.
|
|
|
|
|
|
|
|
### param: JSHandle.evaluateHandle.pageFunction
|
2021-01-08 16:17:54 -08:00
|
|
|
* langs: js
|
2021-01-07 11:46:05 -08:00
|
|
|
- `pageFunction` <[function]|[string]>
|
|
|
|
|
|
|
|
Function to be evaluated
|
|
|
|
|
|
|
|
### param: JSHandle.evaluateHandle.arg
|
|
|
|
- `arg` <[EvaluationArgument]>
|
|
|
|
|
|
|
|
Optional argument to pass to [`param: pageFunction`]
|
|
|
|
|
|
|
|
## async method: JSHandle.getProperties
|
|
|
|
- returns: <[Map]<[string], [JSHandle]>>
|
|
|
|
|
|
|
|
The method returns a map with **own property names** as keys and JSHandle instances for the property values.
|
|
|
|
|
|
|
|
```js
|
|
|
|
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();
|
|
|
|
```
|
|
|
|
|
|
|
|
## async method: JSHandle.getProperty
|
|
|
|
- returns: <[JSHandle]>
|
|
|
|
|
|
|
|
Fetches a single property from the referenced object.
|
|
|
|
|
|
|
|
### param: JSHandle.getProperty.propertyName
|
|
|
|
- `propertyName` <[string]>
|
|
|
|
|
|
|
|
property to get
|
|
|
|
|
|
|
|
## async method: JSHandle.jsonValue
|
|
|
|
- returns: <[Serializable]>
|
|
|
|
|
|
|
|
Returns a JSON representation of the object. If the object has a `toJSON` function, it **will not be called**.
|
|
|
|
|
|
|
|
> **NOTE** 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.
|