8b9f7e5b00
Right now, `<webview>` is the only way to embed additional content in a `BrowserWindow`. Unfortunately `<webview>` suffers from a [number of problems](https://github.com/electron/electron/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aopen%20label%3Awebview%20). To make matters worse, many of these are upstream Chromium bugs instead of Electron-specific bugs. For us at [Figma](https://www.figma.com), the main issue is very slow performance. Despite the upstream improvements to `<webview>` through the OOPIF work, it is probable that there will continue to be `<webview>`-specific bugs in the future. Therefore, this introduces a `<webview>` alternative to called `BrowserView`, which... - is a thin wrapper around `api::WebContents` (so bugs in `BrowserView` will likely also be bugs in `BrowserWindow` web contents) - is instantiated in the main process like `BrowserWindow` (and unlike `<webview>`, which lives in the DOM of a `BrowserWindow` web contents) - needs to be added to a `BrowserWindow` to display something on the screen This implements the most basic API. The API is expected to evolve and change in the near future and has consequently been marked as experimental. Please do not use this API in production unless you are prepared to deal with breaking changes. In the future, we will want to change the API to support multiple `BrowserView`s per window. We will also want to consider z-ordering auto-resizing, and possibly even nested views.
1.6 KiB
1.6 KiB
Class: BrowserView
Create and control views.
Note: The BrowserView API is currently experimental and may change or be removed in future Electron releases.
Process: Main
A BrowserView
can be used to embed additional web content into a
BrowserWindow
. It is like a child window, except that it is positioned
relative to its owning window. It is meant to be an alternative to the
webview
tag.
Example
// In the main process.
const {BrowserView, BrowserWindow} = require('electron')
let win = new BrowserWindow({width: 800, height: 600})
win.on('closed', () => {
win = null
})
let view = new BrowserView()
win.addChildView(view)
view.setBounds(0, 0, 300, 300)
view.webContents.loadURL('https://electron.atom.io')
new BrowserView([options])
Experimental
options
Object (optional)webPreferences
Object (optional) - See BrowserWindow.
Instance Properties
Objects created with new BrowserView
have the following properties:
view.webContents
Experimental
A webContents
object owned by this view.
win.id
Experimental
A Integer
representing the unique ID of the view.
Instance Methods
Objects created with new BrowserWindow
have the following instance methods:
win.setBounds(bounds)
Experimental
bounds
Rectangle
Resizes and moves the view to the supplied bounds relative to the window.
win.setBackgroundColor(color)
Experimental
color
String - Color in#aarrggbb
or#argb
form. The alpha channel is optional.