2015-08-29 06:20:49 +00:00
# webFrame
2014-06-16 06:56:24 +00:00
2016-04-21 22:39:12 +00:00
> Customize the rendering of the current web page.
2014-06-16 06:56:24 +00:00
2016-11-23 19:20:56 +00:00
Process: [Renderer ](../glossary.md#renderer-process )
2016-11-03 17:26:00 +00:00
2018-07-20 17:58:19 +00:00
`webFrame` export of the Electron module is an instance of the `WebFrame`
2022-01-04 01:12:55 +00:00
class representing the current frame. Sub-frames can be retrieved by
certain properties and methods (e.g. `webFrame.firstChild` ).
2018-01-09 19:41:40 +00:00
2014-06-16 06:56:24 +00:00
An example of zooming current page to 200%.
```javascript
2018-09-13 16:10:51 +00:00
const { webFrame } = require('electron')
2015-08-29 06:20:49 +00:00
2016-07-26 01:39:25 +00:00
webFrame.setZoomFactor(2)
2014-06-16 06:56:24 +00:00
```
2015-08-29 06:20:49 +00:00
## Methods
2018-01-09 19:41:40 +00:00
The `WebFrame` class has the following instance methods:
2015-08-29 06:20:49 +00:00
### `webFrame.setZoomFactor(factor)`
2014-06-16 06:56:24 +00:00
2020-03-13 23:13:05 +00:00
* `factor` Double - Zoom factor; default is 1.0.
2014-06-16 06:56:24 +00:00
2015-09-02 16:57:29 +00:00
Changes the zoom factor to the specified factor. Zoom factor is
zoom percent divided by 100, so 300% = 3.0.
2014-06-16 06:56:24 +00:00
2020-03-13 23:13:05 +00:00
The factor must be greater than 0.0.
2015-08-29 06:20:49 +00:00
### `webFrame.getZoomFactor()`
2014-06-16 06:56:24 +00:00
2021-11-16 04:13:18 +00:00
Returns `number` - The current zoom factor.
2014-06-16 06:56:24 +00:00
2015-08-29 06:20:49 +00:00
### `webFrame.setZoomLevel(level)`
2014-06-16 06:56:24 +00:00
2021-11-16 04:13:18 +00:00
* `level` number - Zoom level.
2014-06-16 06:56:24 +00:00
2015-09-01 03:05:57 +00:00
Changes the zoom level to the specified level. The original size is 0 and each
2014-06-16 06:56:24 +00:00
increment above or below represents zooming 20% larger or smaller to default
limits of 300% and 50% of original size, respectively.
2020-09-02 01:06:58 +00:00
> **NOTE**: The zoom policy at the Chromium level is same-origin, meaning that the
> zoom level for a specific domain propagates across all instances of windows with
> the same domain. Differentiating the window URLs will make zoom work per-window.
2015-08-29 06:20:49 +00:00
### `webFrame.getZoomLevel()`
2014-06-16 06:56:24 +00:00
2021-11-16 04:13:18 +00:00
Returns `number` - The current zoom level.
2014-12-20 06:34:34 +00:00
2016-11-22 16:03:04 +00:00
### `webFrame.setVisualZoomLevelLimits(minimumLevel, maximumLevel)`
2016-11-21 20:16:13 +00:00
2021-11-16 04:13:18 +00:00
* `minimumLevel` number
* `maximumLevel` number
2016-11-21 20:16:13 +00:00
2016-11-22 16:03:04 +00:00
Sets the maximum and minimum pinch-to-zoom level.
2018-12-19 03:40:42 +00:00
> **NOTE**: Visual zoom is disabled by default in Electron. To re-enable it, call:
>
> ```js
> webFrame.setVisualZoomLevelLimits(1, 3)
> ```
2021-04-28 21:20:47 +00:00
> **NOTE**: Visual zoom only applies to pinch-to-zoom behavior. Cmd+/-/0 zoom shortcuts are
> controlled by the 'zoomIn', 'zoomOut', and 'resetZoom' MenuItem roles in the application
> Menu. To disable shortcuts, manually [define the Menu](./menu.md#examples) and omit zoom roles
> from the definition.
2018-10-18 16:11:53 +00:00
### `webFrame.setSpellCheckProvider(language, provider)`
2014-12-20 06:34:34 +00:00
2021-11-16 04:13:18 +00:00
* `language` string
2014-12-20 06:34:34 +00:00
* `provider` Object
2019-05-06 15:29:01 +00:00
* `spellCheck` Function
2021-11-16 04:13:18 +00:00
* `words` string[]
2018-10-18 16:11:53 +00:00
* `callback` Function
2021-11-16 04:13:18 +00:00
* `misspeltWords` string[]
2014-12-20 06:34:34 +00:00
Sets a provider for spell checking in input fields and text areas.
2019-10-31 20:11:51 +00:00
If you want to use this method you must disable the builtin spellchecker when you
construct the window.
```js
const mainWindow = new BrowserWindow({
webPreferences: {
spellcheck: false
}
})
```
2018-10-18 16:11:53 +00:00
The `provider` must be an object that has a `spellCheck` method that accepts
an array of individual words for spellchecking.
The `spellCheck` function runs asynchronously and calls the `callback` function
with an array of misspelt words when complete.
2014-12-20 06:34:34 +00:00
An example of using [node-spellchecker][spellchecker] as provider:
```javascript
2018-09-13 16:10:51 +00:00
const { webFrame } = require('electron')
2018-10-18 16:11:53 +00:00
const spellChecker = require('spellchecker')
webFrame.setSpellCheckProvider('en-US', {
spellCheck (words, callback) {
setTimeout(() => {
const spellchecker = require('spellchecker')
const misspelled = words.filter(x => spellchecker.isMisspelled(x))
callback(misspelled)
}, 0)
2014-12-20 06:34:34 +00:00
}
2016-07-26 01:39:25 +00:00
})
2014-12-20 06:34:34 +00:00
```
2022-03-29 07:02:30 +00:00
### `webFrame.insertCSS(css[, options])`
2019-03-11 23:27:57 +00:00
2022-03-16 14:56:20 +00:00
* `css` string
* `options` Object (optional)
* `cssOrigin` string (optional) - Can be either 'user' or 'author'. Sets the [cascade origin ](https://www.w3.org/TR/css3-cascade/#cascade-origin ) of the inserted stylesheet. Default is 'author'.
2019-03-11 23:27:57 +00:00
2021-11-16 04:13:18 +00:00
Returns `string` - A key for the inserted CSS that can later be used to remove
2019-06-17 15:39:36 +00:00
the CSS via `webFrame.removeInsertedCSS(key)` .
Injects CSS into the current web page and returns a unique key for the inserted
stylesheet.
### `webFrame.removeInsertedCSS(key)`
2021-11-16 04:13:18 +00:00
* `key` string
2019-06-17 15:39:36 +00:00
Removes the inserted CSS from the current web page. The stylesheet is identified
by its key, which is returned from `webFrame.insertCSS(css)` .
2019-03-11 23:27:57 +00:00
2016-01-13 03:21:16 +00:00
### `webFrame.insertText(text)`
2021-11-16 04:13:18 +00:00
* `text` string
2016-01-13 03:21:16 +00:00
2016-01-13 03:55:49 +00:00
Inserts `text` to the focused element.
2016-01-13 03:21:16 +00:00
2020-03-03 00:11:40 +00:00
### `webFrame.executeJavaScript(code[, userGesture, callback])`
2019-03-14 19:08:54 +00:00
2021-11-16 04:13:18 +00:00
* `code` string
* `userGesture` boolean (optional) - Default is `false` .
2020-03-03 00:11:40 +00:00
* `callback` Function (optional) - Called after script has been executed. Unless
the frame is suspended (e.g. showing a modal alert), execution will be
synchronous and the callback will be invoked before the method returns. For
compatibility with an older version of this method, the error parameter is
second.
* `result` Any
* `error` Error
2019-03-14 19:08:54 +00:00
2020-03-03 00:11:40 +00:00
Returns `Promise<any>` - A promise that resolves with the result of the executed
code or is rejected if execution throws or results in a rejected promise.
2019-03-14 19:08:54 +00:00
Evaluates `code` in page.
In the browser window some HTML APIs like `requestFullScreen` can only be
invoked by a gesture from the user. Setting `userGesture` to `true` will remove
this limitation.
2020-03-03 00:11:40 +00:00
### `webFrame.executeJavaScriptInIsolatedWorld(worldId, scripts[, userGesture, callback])`
2019-03-14 19:08:54 +00:00
2020-03-03 00:11:40 +00:00
* `worldId` Integer - The ID of the world to run the javascript
in, `0` is the default main world (where content runs), `999` is the
world used by Electron's `contextIsolation` feature. Accepts values
in the range 1..536870911.
2019-03-14 19:08:54 +00:00
* `scripts` [WebSource[]](structures/web-source.md)
2021-11-16 04:13:18 +00:00
* `userGesture` boolean (optional) - Default is `false` .
2020-03-03 00:11:40 +00:00
* `callback` Function (optional) - Called after script has been executed. Unless
the frame is suspended (e.g. showing a modal alert), execution will be
synchronous and the callback will be invoked before the method returns. For
compatibility with an older version of this method, the error parameter is
second.
* `result` Any
* `error` Error
Returns `Promise<any>` - A promise that resolves with the result of the executed
2020-05-21 15:56:22 +00:00
code or is rejected if execution could not start.
2019-03-14 19:08:54 +00:00
Works like `executeJavaScript` but evaluates `scripts` in an isolated context.
2017-11-15 10:14:41 +00:00
2020-05-21 15:56:22 +00:00
Note that when the execution of script fails, the returned promise will not
reject and the `result` would be `undefined` . This is because Chromium does not
dispatch errors of isolated worlds to foreign worlds.
2019-02-13 18:05:28 +00:00
### `webFrame.setIsolatedWorldInfo(worldId, info)`
2020-11-05 22:12:43 +00:00
2019-03-11 23:27:57 +00:00
* `worldId` Integer - The ID of the world to run the javascript in, `0` is the default world, `999` is the world used by Electrons `contextIsolation` feature. Chrome extensions reserve the range of IDs in `[1 << 20, 1 << 29)` . You can provide any integer here.
2019-02-13 18:05:28 +00:00
* `info` Object
2021-11-16 04:13:18 +00:00
* `securityOrigin` string (optional) - Security origin for the isolated world.
* `csp` string (optional) - Content Security Policy for the isolated world.
* `name` string (optional) - Name for isolated world. Useful in devtools.
2019-02-13 18:05:28 +00:00
Set the security origin, content security policy and name of the isolated world.
Note: If the `csp` is specified, then the `securityOrigin` also has to be specified.
2016-05-12 22:03:47 +00:00
### `webFrame.getResourceUsage()`
2016-09-24 23:59:30 +00:00
Returns `Object` :
2016-10-25 03:35:18 +00:00
2016-09-28 07:00:01 +00:00
* `images` [MemoryUsageDetails ](structures/memory-usage-details.md )
2018-08-16 17:26:36 +00:00
* `scripts` [MemoryUsageDetails ](structures/memory-usage-details.md )
2016-09-28 07:00:01 +00:00
* `cssStyleSheets` [MemoryUsageDetails ](structures/memory-usage-details.md )
* `xslStyleSheets` [MemoryUsageDetails ](structures/memory-usage-details.md )
* `fonts` [MemoryUsageDetails ](structures/memory-usage-details.md )
* `other` [MemoryUsageDetails ](structures/memory-usage-details.md )
2016-09-24 23:59:30 +00:00
2016-05-14 13:48:25 +00:00
Returns an object describing usage information of Blink's internal memory
caches.
2016-05-12 22:03:47 +00:00
2016-05-14 13:48:25 +00:00
```javascript
2018-09-13 16:10:51 +00:00
const { webFrame } = require('electron')
2016-05-14 13:48:25 +00:00
console.log(webFrame.getResourceUsage())
```
This will generate:
2016-08-16 21:50:21 +00:00
```javascript
2016-05-12 22:03:47 +00:00
{
2016-05-14 13:48:25 +00:00
images: {
count: 22,
size: 2549,
2017-01-24 05:51:28 +00:00
liveSize: 2542
2016-05-12 22:03:47 +00:00
},
2016-05-14 13:48:25 +00:00
cssStyleSheets: { /* same with "images" */ },
xslStyleSheets: { /* same with "images" */ },
fonts: { /* same with "images" */ },
2016-07-26 01:39:25 +00:00
other: { /* same with "images" */ }
2016-08-16 21:49:42 +00:00
}
2016-05-12 22:03:47 +00:00
```
2016-05-14 13:48:25 +00:00
### `webFrame.clearCache()`
2016-05-12 22:03:47 +00:00
2016-05-14 13:48:25 +00:00
Attempts to free memory that is no longer being used (like images from a
previous navigation).
2016-05-12 22:03:47 +00:00
Note that blindly calling this method probably makes Electron slower since it
will have to refill these emptied caches, you should only call it if an event
2016-06-16 22:19:38 +00:00
in your app has occurred that makes you think your page is actually using less
2016-05-12 22:03:47 +00:00
memory (i.e. you have navigated from a super heavy page to a mostly empty one,
2016-05-14 13:48:25 +00:00
and intend to stay there).
2016-05-12 22:03:47 +00:00
2014-12-20 06:34:34 +00:00
[spellchecker]: https://github.com/atom/node-spellchecker
2018-01-09 19:41:40 +00:00
### `webFrame.getFrameForSelector(selector)`
2021-11-16 04:13:18 +00:00
* `selector` string - CSS selector for a frame element.
2018-01-09 19:41:40 +00:00
2018-02-26 06:05:46 +00:00
Returns `WebFrame` - The frame element in `webFrame's` document selected by
`selector` , `null` would be returned if `selector` does not select a frame or
if the frame is not in the current renderer process.
2018-01-09 19:41:40 +00:00
### `webFrame.findFrameByName(name)`
2021-11-16 04:13:18 +00:00
* `name` string
2018-02-26 06:05:46 +00:00
Returns `WebFrame` - A child of `webFrame` with the supplied `name` , `null`
would be returned if there's no such frame or if the frame is not in the current
renderer process.
2018-01-09 19:41:40 +00:00
2018-05-01 04:34:41 +00:00
### `webFrame.findFrameByRoutingId(routingId)`
2018-05-11 18:05:05 +00:00
* `routingId` Integer - An `Integer` representing the unique frame id in the
current renderer process. Routing IDs can be retrieved from `WebFrame`
instances (`webFrame.routingId`) and are also passed by frame
specific `WebContents` navigation events (e.g. `did-frame-navigate` )
2018-07-20 17:58:19 +00:00
Returns `WebFrame` - that has the supplied `routingId` , `null` if not found.
2018-05-01 04:34:41 +00:00
2020-10-19 11:48:16 +00:00
### `webFrame.isWordMisspelled(word)`
2021-11-16 04:13:18 +00:00
* `word` string - The word to be spellchecked.
2020-10-19 11:48:16 +00:00
2021-11-16 04:13:18 +00:00
Returns `boolean` - True if the word is misspelled according to the built in
2020-10-19 11:48:16 +00:00
spellchecker, false otherwise. If no dictionary is loaded, always return false.
### `webFrame.getWordSuggestions(word)`
2021-11-16 04:13:18 +00:00
* `word` string - The misspelled word.
2020-10-19 11:48:16 +00:00
2021-11-16 04:13:18 +00:00
Returns `string[]` - A list of suggested words for a given word. If the word
2020-10-19 11:48:16 +00:00
is spelled correctly, the result will be empty.
2018-01-09 19:41:40 +00:00
## Properties
2019-07-26 23:12:59 +00:00
### `webFrame.top` _Readonly_
2018-01-09 19:41:40 +00:00
2019-07-26 23:12:59 +00:00
A `WebFrame | null` representing top frame in frame hierarchy to which `webFrame`
2018-02-26 06:05:46 +00:00
belongs, the property would be `null` if top frame is not in the current
renderer process.
2018-01-09 19:41:40 +00:00
2019-07-26 23:12:59 +00:00
### `webFrame.opener` _Readonly_
2018-01-09 19:41:40 +00:00
2019-07-26 23:12:59 +00:00
A `WebFrame | null` representing the frame which opened `webFrame` , the property would
2018-02-26 06:05:46 +00:00
be `null` if there's no opener or opener is not in the current renderer process.
2018-01-09 19:41:40 +00:00
2019-07-26 23:12:59 +00:00
### `webFrame.parent` _Readonly_
2018-01-09 19:41:40 +00:00
2019-07-26 23:12:59 +00:00
A `WebFrame | null` representing parent frame of `webFrame` , the property would be
2018-02-26 06:05:46 +00:00
`null` if `webFrame` is top or parent is not in the current renderer process.
2018-01-09 19:41:40 +00:00
2019-07-26 23:12:59 +00:00
### `webFrame.firstChild` _Readonly_
2018-01-09 19:41:40 +00:00
2019-07-26 23:12:59 +00:00
A `WebFrame | null` representing the first child frame of `webFrame` , the property
2018-02-26 06:05:46 +00:00
would be `null` if `webFrame` has no children or if first child is not in the
current renderer process.
2018-01-09 19:41:40 +00:00
2019-07-26 23:12:59 +00:00
### `webFrame.nextSibling` _Readonly_
2018-01-09 19:41:40 +00:00
2019-07-26 23:12:59 +00:00
A `WebFrame | null` representing next sibling frame, the property would be `null` if
2018-05-01 04:34:41 +00:00
`webFrame` is the last frame in its parent or if the next sibling is not in the
2018-02-26 06:05:46 +00:00
current renderer process.
2018-05-01 04:34:41 +00:00
2019-07-26 23:12:59 +00:00
### `webFrame.routingId` _Readonly_
2018-05-01 04:34:41 +00:00
2018-05-11 18:05:05 +00:00
An `Integer` representing the unique frame id in the current renderer process.
Distinct WebFrame instances that refer to the same underlying frame will have
the same `routingId` .