# `` tag Use the `webview` tag to embed 'guest' content (such as web pages) in your atom-shell app. The guest content is contained within the `webview` container; an embedder page within your app controls how the guest content is laid out and rendered. Different from the `iframe`, the `webview` runs in a separate process than your app; it doesn't have the same permissions as your web page and all interactions between your app and embedded content will be asynchronous. This keeps your app safe from the embedded content. ## Example To embed a web page in your app, add the `webview` tag to your app's embedder page (this is the app page that will display the guest content). In its simplest form, the `webview` tag includes the `src` of the web page and css styles that control the appearance of the `webview` container: ```html ``` If you want to control the guest content in any way, you can write JavaScript that listens for `webview` events and responds to those events using the `webview` methods. Here's sample code with two event listeners: one that listens for the web page to start loading, the other for the web page to stop loading, and displays a "loading..." message during the load time: ```html ``` ## Tag attributes ### src ```html ``` Returns the visible URL. Writing to this attribute initiates top-level navigation. Assigning `src` its own value will reload the current page. The `src` attribute can also accept data URLs, such as `data:text/plain,Hello, world!`. ### autosize ```html ``` If "on", the `webview` will container will automatically resize within the bounds specified by the attributes `minwidth`, `minheight`, `maxwidth`, and `maxheight`. These contraints do not impact the `webview` UNLESS `autosize` is enabled. When `autosize` is enabled, the `webview` container size cannot be less than the minimum values or greater than the maximum. ### nodeintegration ```html ``` If "on", the guest page in `webview` will have node integration and can use node APIs like `require` and `process` to access low level system resources. ## Methods ### ``.getUrl() Returns URL of guest page. ### ``.getTitle() Returns the title of guest page. ### ``.isLoading() Returns whether guest page is still loading resources. ### ``.isWaitingForResponse() Returns whether guest page is waiting for a first-response for the main resource of the page. ### ``.stop() Stops any pending navigation. ### ``.reload() Reloads guest page. ### ``.reloadIgnoringCache() Reloads guest page and ignores cache. ### ``.canGoBack() Returns whether guest page can go back. ### ``.canGoForward() Returns whether guest page can go forward. ### ``.canGoToOffset(offset) * `offset` Integer Returns whether guest page can go to `offset`. ### ``.goBack() Makes guest page go back. ### ``.goForward() Makes guest page go forward. ### ``.goToIndex(index) * `index` Integer Navigates to the specified absolute index. ### ``.goToOffset(offset) * `offset` Integer Navigates to the specified offset from the "current entry". ### ``.isCrashed() Whether the renderer process has crashed. ### ``.setUserAgent(userAgent) * `userAgent` String Overrides the user agent for guest page. ### ``.insertCSS(css) * `css` String Injects CSS into guest page. ### ``.executeJavaScript(code) * `code` String Evaluate `code` in guest page. ### ``.send(channel[, args...]) * `channel` String Send `args..` to guest page via `channel` in asynchronous message, the guest page can handle it by listening to the `channel` event of `ipc` module. See [WebContents.send](browser-window.md#webcontentssendchannel-args) for examples. ## DOM events ### did-finish-load Fired when the navigation is done, i.e. the spinner of the tab will stop spinning, and the `onload` event was dispatched. ### did-fail-load * `errorCode` Integer * `errorDescription` String This event is like `did-finish-load`, but fired when the load failed or was cancelled, e.g. `window.stop()` is invoked. ### did-frame-finish-load * `isMainFrame` Boolean Fired when a frame has done navigation. ### did-start-loading Corresponds to the points in time when the spinner of the tab starts spinning. ### did-stop-loading Corresponds to the points in time when the spinner of the tab stops spinning. ### did-get-redirect-request * `oldUrl` String * `newUrl` String * `isMainFrame` Boolean Fired when a redirect was received while requesting a resource. ### console-message * `level` Integer * `message` String * `line` Integer * `sourceId` String Fired when the guest window logs a console message. The following example code forwards all log messages to the embedder's console without regard for log level or other properties. ```javascript webview.addEventListener('console-message', function(e) { console.log('Guest page logged a message: ', e.message); }); ``` ### new-window * `url` String * `frameName` String Fired when the guest page attempts to open a new browser window. The following example code opens the new url in system's default browser. ```javascript webview.addEventListener('new-window', function(e) { require('shell').openExternal(e.url); }); ``` ### close Fired when the guest window attempts to close itself. The following example code navigates the `webview` to `about:blank` when the guest attempts to close itself. ```javascript webview.addEventListener('close', function() { webview.src = 'about:blank'; }); ``` ### crashed Fired when the renderer process is crashed. ### destroyed Fired when the WebContents is destroyed.