* chore: bump chromium in DEPS to 91.0.4472.5 * chore: rebuild chromium/dcheck.patch with import-patches -3 Mechanical only; no code changes (cherry picked from commit68e369c945) * chore: remove content_browser_main_loop.patch Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2725153 The function being patched (BrowserMainLoop::MainMessageLoopRun()) no longer exists. NB: if removing this introduces regressions the likely fix will be to add a similar patch for ShellBrowserMainParts::WillRunMainMessageLoop() which has similar code and was added at the same time this was removed. (cherry picked from commit5220829748) * chore: rebuild chromium/put_back_deleted_colors_for_autofill.patch with import-patches -3 Mechanical only; no code changes (cherry picked from commit7613ca268e) * chore: rebuild chromium/disable_color_correct_rendering.patch with import-patches -3 Mechanical only; no code changes (cherry picked from commitc0c5f45195) * chore: rebuild chromium/eat_allow_disabling_blink_scheduler_throttling_per_renderview.patch with patch Mechanical only; no code changes (cherry picked from commitea6f3e096e) * chore: rebuild chromium/gpu_notify_when_dxdiag_request_fails.patch with import-patches -3 Mechanical only; no code changes (cherry picked from commit8d9aa4f1f2) * chore: rebuild chromium/ui_gtk_public_header.patch manually no code changes (cherry picked from commit79e84fb72b) * chore: rebuild chromium/web_contents.patch with import-patches -3 Mechanical only; no code changes (cherry picked from commit543fb6dae7) * chore: remove v8/skip_global_registration_of_shared_arraybuffer_backing_stores.patch Refs: https://chromium-review.googlesource.com/c/v8/v8/+/2763874 This patch has been merged upstream (cherry picked from commitd36de6e2d6) * chore: export patches (cherry picked from commit7c148e9102) * chore: update add_trustedauthclient_to_urlloaderfactory.patch Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2757969 Sync with removal of render_frame_id_ (cherry picked from commitfd954aefd4) * chore: sync chromium/put_back_deleted_colors_for_autofill.patch Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2785841 SkColorFromColorId() no longer takes theme, scheme args (cherry picked from commitf676453fb8) * chore: sync chromium/put_back_deleted_colors_for_autofill.patch Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2772143 Change new calls to GetDarkSchemeColor to fit our patched call signature (cherry picked from commit27c5d9da5e) * chore: update add_trustedauthclient_to_urlloaderfactory.patch Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2757969 Sync with removal of render_frame_id_ in our mojom (cherry picked from commit285db29015) * chore: update chromium/frame_host_manager.patch Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2740008 UrlInfo ctor now takes UrlInfo::OriginIsolationRequest instead of a bool (cherry picked from commit06ac6c5d6a) * chore: update chromium/revert_remove_contentrendererclient_shouldfork.patch Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2755314 Upstream has removed `history_list_length_` which we were comparing to 0 to calculate our `is_initial_navigation` bool when calling ShouldFork(). ShouldFork() is ours and none of the code paths actually use that param, so this commit removes it altogether. (cherry picked from commit2b0cb2ca2a) * chore: update permissions_to_register Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2789074 Replace all uses of APIPermission::ID enum with Mojo type (cherry picked from commitbfe55a9c68) * refactor: update return type of PreMainMessageLoopRun() Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2725153 Used to return void; now returns an int errorcode. Note: 2725153 also has some nice doc updates about Browser's "stages" (cherry picked from commit2622e91c44) * refactor: sync ElectronBrowserMainParts to MainParts changes Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2725153 RunMainMessageLoopParts has been replaced with WillRunMainMessageLoop so `BrowserMainLoop::result_code_` is no longer available to us for our exit_code_ pointer. This variable held a dual role: (1) of course, hold the exit code, but also (2) was a nullptr before the message loop was ready, indicating to anyone calling SetExitCode() that we were still in startup and could just exit() without any extra steps. exit_code_ still fulfills these two roles but is now a base::Optional. (cherry picked from commit0497272fab) * chore: update ElectronBrowserMainParts::PreDefaultMainMessageLoopRun Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2725153 BrowserMainParts::BrowsePreDefaultMainMesssageLoopRun() has been removed; move that work to the new WillRunMainMessageLoop(). (cherry picked from commit77eacd8073) * refactor: stop using CallbackList; it has been removed. Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2785973 (cherry picked from commit4bcf9d58b0) * refactor: update use of threadpools. Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2773408 The upstream code is still in flux (e.g. reverts and re-lands) but the tl;dr for this commit is (1) include thread_pool.h if you're using it and (2) don't instantiate pools directly. (cherry picked from commit4e33ee0ad3) * refactor: remove routing_id from CreateLoaderAndStart Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2762858 NB: One logic branch in ProxyingURLLoaderFactory::CreateLoaderAndStart calls std::make_unique<InProgressRequest>, which needs a routing_id. This PR uses the member field `routing_id_` since there's no longer one being passed into CreateLoaderAndStart. (cherry picked from commit70759ad342) * refactor: sync to upstream ParittionOptions churn Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2771318 PartitionOptions' enums have changed. (cherry picked from commit48f437b478) * refactor: update Manifest::Location usage Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2771320 tldr: s/Manifest::FOO/ManifestLocation::kFoo/ (cherry picked from commit866e02999a) * update patches (cherry picked from commit4444596af5) * refactor: update extensions::Manifest to upstream Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2771320 - extensions::Manifest::COMPONENT + extensions::mojom::ManifestLocation::kExternalComponent (cherry picked from commitc97cef7059) * refactor: sync with upstream UrlInfo ctor changes Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2740008 UrlInfo ctor now takes UrlInfo::OriginIsolationRequest instead of a bool (cherry picked from commit7effb909b6) * chore: update invocation of convert_protocol_to_json.py Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2792623 python3 is being used in parts of the upstream build, but the copy of convert_protocol_to_json.py invoked in v8/third_party/inspector_protocol is not python3-friendly. Node has a py2+3-friendly version of it in its tools directory, so call it instead. (cherry picked from commita237fc9aff) * chore: use extensions::mojom::APIPermissionID Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2791122 tldr: - extensions::APIPermission::kFoo + extensions::mojom::APIPermissionID::kFoo (cherry picked from commitbf9ef3b636) * chore: Remove support for TLS1.0/1.1 in SSLVersionMin policy Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2765737 Remove TLS v1.0 & 1.1 from our SSLProtocolVersionFromString() function. This is the same change made upstream at https://chromium-review.googlesource.com/c/chromium/src/+/2765737/8/chrome/browser/ssl/ssl_config_service_manager_pref.cc (cherry picked from commitc4558b031d) * fixup! chore: update ElectronBrowserMainParts::PreDefaultMainMessageLoopRun (cherry picked from commitf509f1b8cc) * chore: Use IDType for permission change subscriptions. Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2791431 tldr: {Subscribe,Unsubscribe}PermissionStatusChange's tag type used to be an int; now it's the new SubscriptionId type (which is an IdType64). (cherry picked from commit11608d2745) * chore: sync PowerMonitor code to upstream refactor Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2752635 tldr: PowerMonitor has been split into PowerStateObserver, PowerSuspendObserver, and PowerThermalObserver to reduce number of tasks posted to consumers who only need notifications for one of those things instead of all of them. (cherry picked from commit2d4c79413b) * chore: use PartitionOptions's new Cookies field Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2771318 (cherry picked from commitf69e95824f) * Revert "refactor: remove routing_id from CreateLoaderAndStart" This reverts commit 8c9773b87a3c84f9073a47089eb2b6889d745245. 8c9773b was only a partial fix; reverting to start & try again. (cherry picked from commit96195f845b) * update patches (cherry picked from commit5d64fa28d5) * chore: update chromium/accelerator.patch Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2795472 tldr: sync patch with upstream renamed variable & macro names. (cherry picked from commitce541697e5) * chore: update chromium/gtk_visibility.patch Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2796200 tldr: no code changes; just updating the diff to apply cleanly. note: ooh upstream Wayland hacking! (cherry picked from commit6ec5c72878) * chore: update chromium/picture-in-picture.patch Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2710023 tldr: no code changes; just updating the diff to apply cleanly. (cherry picked from commit8ae0b0d740) * chore: update chromium/worker_feat_add_hook_to_notify_script_ready.patch Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2775573 tldr: no code changes; just updating the diff to apply cleanly. (cherry picked from commitd5b017208b) * chore: export_all_patches (cherry picked from commit218952ec9d) * chore: update chromium/feat_add_set_theme_source_to_allow_apps_to.patch Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2796511 tldr: NotifyObservers has been renamed to NotifyOnNativeThemeUpdated, so update the invocation in our patch. (cherry picked from commit6fe734f5ca) * chore: update ElectronBrowserClient w/upstream API Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2797454 tldr: GetDevToolsManagerDelegate() was returning an owned raw pointer. Replaced it with CreateDevToolsManagerDelegate() which uses unique_ptr<>. (cherry picked from commitb760f7162b) * chore: handle new content::PermissionType::FILE_HANDLING in toV8() Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2762201 `file-handling` string confirmed in https://chromium-review.googlesource.com/c/chromium/src/+/2762201/18/chrome/browser/ui/webui/settings/site_settings_helper.cc (cherry picked from commitd9cdb18eb7) * refactor: remove routing_id from CreateLoaderAndStart pt 1 Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2762858 Part 1: the easiest ones (cherry picked from commit6ee282b27a) * 2796724: Support Python3 https://chromium-review.googlesource.com/c/infra/luci/python-adb/+/2796724 (cherry picked from commitfbf5c04716) * 2668974: WebShare: Implement SharingServicePicker https://chromium-review.googlesource.com/c/chromium/src/+/2668974 (cherry picked from commit74577f2156) * 2802766: Apply modernize-make-unique to media/ https://chromium-review.googlesource.com/c/chromium/src/+/2802766 (cherry picked from commit409328fc38) * 2802823: Apply modernize-make-unique to gpu/ https://chromium-review.googlesource.com/c/chromium/src/+/2802823 (cherry picked from commit43658b0ed3) * 2803041: Apply modernize-make-unique to remaining files https://chromium-review.googlesource.com/c/chromium/src/+/2803041 (cherry picked from commit01f514f537) * 2798873: Convert GtkKeyBindingsHandler build checks to runtime checks https://chromium-review.googlesource.com/c/chromium/src/+/2798873 (cherry picked from commit5384398823) * 2733595: [ch-r] Parse ACCEPT_CH H2/3 frame and restart with new headers if needed https://chromium-review.googlesource.com/c/chromium/src/+/2733595 (cherry picked from commitf6cf612ee3) * chore: update patch indices (cherry picked from commitf078eddc2b) * 2795107: Remove unused PermissionRequest IDs. https://chromium-review.googlesource.com/c/chromium/src/+/2795107 (cherry picked from commit93077afbfb) * chore: fixup patch indices (cherry picked from commit8f2abcee38) * PiP 1.5: Add microphone, camera, and hang up buttons to the PiP window https://chromium-review.googlesource.com/c/chromium/src/+/2710023 (cherry picked from commit4a4da7ad6a) * fixup! refactor: remove routing_id from CreateLoaderAndStart (cherry picked from commita1f0bbb0b5) * refactor: use URLLoaderNetworkServiceObserver for auth requests from SimpleURLLoader (cherry picked from commit186528aab9) * fixup! chore: fixup patch indices (cherry picked from commit3129ea403d) * 2724817: Expand scope of wasm-eval to all URLs https://chromium-review.googlesource.com/c/chromium/src/+/2724817 (cherry picked from commitdacbf3d60d) * 2797341: [ozone/x11] Enabled the global shortcut listener. https://chromium-review.googlesource.com/c/chromium/src/+/2797341 (cherry picked from commit945890fcf9) * 2805553: Reland Add GTK ColorMixers to ColorPipeline P1 https://chromium-review.googlesource.com/c/chromium/src/+/2805553 (cherry picked from commitdb74b380fd) *2804366: PiP 1.5: Label back to tab button with origin and center it https://chromium-review.googlesource.com/c/chromium/src/+/2804366 (cherry picked from commitdeca961382) * 2784730: Fix crash on AX mode change in NativeViewHost without a Widget https://chromium-review.googlesource.com/c/chromium/src/+/2784730 (cherry picked from commit0fac051a0c) * chore: update patch indices (cherry picked from commit01235ba336) * 2810174: Add PdfAnnotationsEnabled policy. https://chromium-review.googlesource.com/c/chromium/src/+/2810174 (cherry picked from commitc8a7225cac) * 2807829: Allow capturers to indicate if they want a WakeLock or not. https://chromium-review.googlesource.com/c/chromium/src/+/2807829 (cherry picked from commit39f0c263d7) * update patches after cherry picks * chore: icon_util_x11 is now icon_util_linux Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2791362 (cherry picked from commitfa0d3a0f75) * build: fix missing symbols on linux build * use_ozone and use_x11 are not exclusive * new button view to build for pip Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2797341 Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2804366 (cherry picked from commit28253c6ccc) * chore: remove patch conflict (cherry picked from commit19c9e94014) * chore: build bttlb on all platforms for pip (cherry picked from commitae70252e09) * build: update linux manifests (cherry picked from commit88baf8835c) * chore: update windows zip manifests (cherry picked from commit01a1c37999) * chore: update mac zip manifests (cherry picked from commita203347075) * chore: update is_media_key patch to handle new ozone impl Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2797341 (cherry picked from commit9d31092db8) * build: update sysroots Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2628496 (cherry picked from commit4985c57685) * build: add missing base include on windows (cherry picked from commitec782c1bde) * fix: update frame host manager patch for new state transitions Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2714464 (cherry picked from commit2772241a2c) * refactor: implement missing URLLoaderNetworkServiceObserver methods It is against The Mojo Rules to leave hanging callbacks. These always have to be called. Refs:186528aab9(cherry picked from commit2ce2f73a0c) * spec: fix locale test on local linux (cherry picked from commit898f8448f8) * fix: pass the exit code correctly in new PreMainMessageLoopRun Refs:2622e91c44(cherry picked from commitf8f388573c) * fix: ensure we early-exit when request_handler_ is not provided Refs:93077afbfb(cherry picked from commit20cd4cb875) * fix: strongly set result_code in the BrowserMainLoop (cherry picked from commita1d19bc212) * fix: invalid usage of non-targetted PostTask You must always either use a host threadpool or specify a target thread. In this case we did neither after this refactor. Refs:4e33ee0ad3(cherry picked from commit3632067c10) * build: ensure CI is truthy in arm test env (cherry picked from commite455f68b64) * chore: add mojo error code to url loader failure (cherry picked from commit60cc150a17) * fix: handle windowCaptureMacV2 being enabled when fetching media source id Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2709931 (cherry picked from commitf835dd1c2a) * chore: fix broken gtk_util color patch (cherry picked from commite0720df6d4) * chore: fix gn check (cherry picked from commit72ca89b311) * chore: add node patches for V8 changes (cherry picked from commit96027e0186) * chore: add thread_pool include for views delegate win (cherry picked from commit62faa304df) * chore: remove stray .rej files in patch (cherry picked from commit52562150ca) * chore: bump chromium in DEPS to 91.0.4472.10 * update patches * Merge branch '13-x-y' into roller/chromium/13-x-y * update patches * try to track down WOA failures * see if this helps websql failure * chore: debug websql error on WOA * Revert "chore: debug websql error on WOA" This reverts commit572987a15f. * Revert "see if this helps websql failure" This reverts commitf771dfe0ab. * Revert "try to track down WOA failures" This reverts commitd4eb5efdb3. * chore: no long disable CalculateNativeWinOcclusion on WOA This was resolved in https://chromium-review.googlesource.com/c/chromium/src/+/2478082 * run specs separately on WOA * Update comment * escape % * specify files properly * revert WOA testing changes * chore: bump chromium in DEPS to 91.0.4472.33 * chore: update patches * Trigger CI Co-authored-by: Charles Kerr <charles@charleskerr.com> Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org> Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> Co-authored-by: deepak1556 <hop2deep@gmail.com> Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com> Co-authored-by: Samuel Attard <sattard@slack-corp.com>
66 KiB
webContents
Render and control web pages.
Process: Main
webContents is an EventEmitter.
It is responsible for rendering and controlling a web page and is a property of
the BrowserWindow object. An example of accessing the
webContents object:
const { BrowserWindow } = require('electron')
const win = new BrowserWindow({ width: 800, height: 1500 })
win.loadURL('http://github.com')
const contents = win.webContents
console.log(contents)
Methods
These methods can be accessed from the webContents module:
const { webContents } = require('electron')
console.log(webContents)
webContents.getAllWebContents()
Returns WebContents[] - An array of all WebContents instances. This will contain web contents
for all windows, webviews, opened devtools, and devtools extension background pages.
webContents.getFocusedWebContents()
Returns WebContents - The web contents that is focused in this application, otherwise
returns null.
webContents.fromId(id)
idInteger
Returns WebContents | undefined - A WebContents instance with the given ID, or
undefined if there is no WebContents associated with the given ID.
Class: WebContents
Render and control the contents of a BrowserWindow instance.
Process: Main
Instance Events
Event: 'did-finish-load'
Emitted when the navigation is done, i.e. the spinner of the tab has stopped
spinning, and the onload event was dispatched.
Event: 'did-fail-load'
Returns:
eventEventerrorCodeIntegererrorDescriptionStringvalidatedURLStringisMainFrameBooleanframeProcessIdIntegerframeRoutingIdInteger
This event is like did-finish-load but emitted when the load failed.
The full list of error codes and their meaning is available here.
Event: 'did-fail-provisional-load'
Returns:
eventEventerrorCodeIntegererrorDescriptionStringvalidatedURLStringisMainFrameBooleanframeProcessIdIntegerframeRoutingIdInteger
This event is like did-fail-load but emitted when the load was cancelled
(e.g. window.stop() was invoked).
Event: 'did-frame-finish-load'
Returns:
eventEventisMainFrameBooleanframeProcessIdIntegerframeRoutingIdInteger
Emitted when a frame has done navigation.
Event: 'did-start-loading'
Corresponds to the points in time when the spinner of the tab started spinning.
Event: 'did-stop-loading'
Corresponds to the points in time when the spinner of the tab stopped spinning.
Event: 'dom-ready'
Returns:
eventEvent
Emitted when the document in the given frame is loaded.
Event: 'page-title-updated'
Returns:
eventEventtitleStringexplicitSetBoolean
Fired when page title is set during navigation. explicitSet is false when
title is synthesized from file url.
Event: 'page-favicon-updated'
Returns:
eventEventfaviconsString[] - Array of URLs.
Emitted when page receives favicon urls.
Event: 'new-window' Deprecated
Returns:
eventNewWindowWebContentsEventurlStringframeNameStringdispositionString - Can bedefault,foreground-tab,background-tab,new-window,save-to-diskandother.optionsBrowserWindowConstructorOptions - The options which will be used for creating the newBrowserWindow.additionalFeaturesString[] - The non-standard features (features not handled by Chromium or Electron) given towindow.open().referrerReferrer - The referrer that will be passed to the new window. May or may not result in theRefererheader being sent, depending on the referrer policy.postBodyPostBody (optional) - The post data that will be sent to the new window, along with the appropriate headers that will be set. If no post data is to be sent, the value will benull. Only defined when the window is being created by a form that settarget=_blank.
Deprecated in favor of webContents.setWindowOpenHandler.
Emitted when the page requests to open a new window for a url. It could be
requested by window.open or an external link like <a target='_blank'>.
By default a new BrowserWindow will be created for the url.
Calling event.preventDefault() will prevent Electron from automatically creating a
new BrowserWindow. If you call event.preventDefault() and manually create a new
BrowserWindow then you must set event.newGuest to reference the new BrowserWindow
instance, failing to do so may result in unexpected behavior. For example:
myBrowserWindow.webContents.on('new-window', (event, url, frameName, disposition, options, additionalFeatures, referrer, postBody) => {
event.preventDefault()
const win = new BrowserWindow({
webContents: options.webContents, // use existing webContents if provided
show: false
})
win.once('ready-to-show', () => win.show())
if (!options.webContents) {
const loadOptions = {
httpReferrer: referrer
}
if (postBody != null) {
const { data, contentType, boundary } = postBody
loadOptions.postData = postBody.data
loadOptions.extraHeaders = `content-type: ${contentType}; boundary=${boundary}`
}
win.loadURL(url, loadOptions) // existing webContents will be navigated automatically
}
event.newGuest = win
})
Event: 'did-create-window'
Returns:
windowBrowserWindowdetailsObjecturlString - URL for the created window.frameNameString - Name given to the created window in thewindow.open()call.optionsBrowserWindowConstructorOptions - The options used to create the BrowserWindow. They are merged in increasing precedence: options inherited from the parent, parsed options from thefeaturesstring fromwindow.open(), and options given bywebContents.setWindowOpenHandler. Unrecognized options are not filtered out.additionalFeaturesString[] - The non-standard features (features not handled Chromium or Electron) DeprecatedreferrerReferrer - The referrer that will be passed to the new window. May or may not result in theRefererheader being sent, depending on the referrer policy.postBodyPostBody (optional) - The post data that will be sent to the new window, along with the appropriate headers that will be set. If no post data is to be sent, the value will benull. Only defined when the window is being created by a form that settarget=_blank.dispositionString - Can bedefault,foreground-tab,background-tab,new-window,save-to-diskandother.
Emitted after successful creation of a window via window.open in the renderer.
Not emitted if the creation of the window is canceled from
webContents.setWindowOpenHandler.
See window.open() for more details and how to use this in conjunction with webContents.setWindowOpenHandler.
Event: 'will-navigate'
Returns:
eventEventurlString
Emitted when a user or the page wants to start navigation. It can happen when
the window.location object is changed or a user clicks a link in the page.
This event will not emit when the navigation is started programmatically with
APIs like webContents.loadURL and webContents.back.
It is also not emitted for in-page navigations, such as clicking anchor links
or updating the window.location.hash. Use did-navigate-in-page event for
this purpose.
Calling event.preventDefault() will prevent the navigation.
Event: 'did-start-navigation'
Returns:
eventEventurlStringisInPlaceBooleanisMainFrameBooleanframeProcessIdIntegerframeRoutingIdInteger
Emitted when any frame (including main) starts navigating. isInPlace will be
true for in-page navigations.
Event: 'will-redirect'
Returns:
eventEventurlStringisInPlaceBooleanisMainFrameBooleanframeProcessIdIntegerframeRoutingIdInteger
Emitted as a server side redirect occurs during navigation. For example a 302 redirect.
This event will be emitted after did-start-navigation and always before the
did-redirect-navigation event for the same navigation.
Calling event.preventDefault() will prevent the navigation (not just the
redirect).
Event: 'did-redirect-navigation'
Returns:
eventEventurlStringisInPlaceBooleanisMainFrameBooleanframeProcessIdIntegerframeRoutingIdInteger
Emitted after a server side redirect occurs during navigation. For example a 302 redirect.
This event cannot be prevented, if you want to prevent redirects you should
checkout out the will-redirect event above.
Event: 'did-navigate'
Returns:
eventEventurlStringhttpResponseCodeInteger - -1 for non HTTP navigationshttpStatusTextString - empty for non HTTP navigations
Emitted when a main frame navigation is done.
This event is not emitted for in-page navigations, such as clicking anchor links
or updating the window.location.hash. Use did-navigate-in-page event for
this purpose.
Event: 'did-frame-navigate'
Returns:
eventEventurlStringhttpResponseCodeInteger - -1 for non HTTP navigationshttpStatusTextString - empty for non HTTP navigations,isMainFrameBooleanframeProcessIdIntegerframeRoutingIdInteger
Emitted when any frame navigation is done.
This event is not emitted for in-page navigations, such as clicking anchor links
or updating the window.location.hash. Use did-navigate-in-page event for
this purpose.
Event: 'did-navigate-in-page'
Returns:
eventEventurlStringisMainFrameBooleanframeProcessIdIntegerframeRoutingIdInteger
Emitted when an in-page navigation happened in any frame.
When in-page navigation happens, the page URL changes but does not cause
navigation outside of the page. Examples of this occurring are when anchor links
are clicked or when the DOM hashchange event is triggered.
Event: 'will-prevent-unload'
Returns:
eventEvent
Emitted when a beforeunload event handler is attempting to cancel a page unload.
Calling event.preventDefault() will ignore the beforeunload event handler
and allow the page to be unloaded.
const { BrowserWindow, dialog } = require('electron')
const win = new BrowserWindow({ width: 800, height: 600 })
win.webContents.on('will-prevent-unload', (event) => {
const choice = dialog.showMessageBoxSync(win, {
type: 'question',
buttons: ['Leave', 'Stay'],
title: 'Do you want to leave this site?',
message: 'Changes you made may not be saved.',
defaultId: 0,
cancelId: 1
})
const leave = (choice === 0)
if (leave) {
event.preventDefault()
}
})
Event: 'crashed' Deprecated
Returns:
eventEventkilledBoolean
Emitted when the renderer process crashes or is killed.
Deprecated: This event is superceded by the render-process-gone event
which contains more information about why the render process disappeared. It
isn't always because it crashed. The killed boolean can be replaced by
checking reason === 'killed' when you switch to that event.
Event: 'render-process-gone'
Returns:
eventEventdetailsObjectreasonString - The reason the render process is gone. Possible values:clean-exit- Process exited with an exit code of zeroabnormal-exit- Process exited with a non-zero exit codekilled- Process was sent a SIGTERM or otherwise killed externallycrashed- Process crashedoom- Process ran out of memorylaunch-failed- Process never successfully launchedintegrity-failure- Windows code integrity checks failed
exitCodeInteger - The exit code of the process, unlessreasonislaunch-failed, in which caseexitCodewill be a platform-specific launch failure error code.
Emitted when the renderer process unexpectedly disappears. This is normally because it was crashed or killed.
Event: 'unresponsive'
Emitted when the web page becomes unresponsive.
Event: 'responsive'
Emitted when the unresponsive web page becomes responsive again.
Event: 'plugin-crashed'
Returns:
eventEventnameStringversionString
Emitted when a plugin process has crashed.
Event: 'destroyed'
Emitted when webContents is destroyed.
Event: 'before-input-event'
Returns:
eventEventinputObject - Input properties.typeString - EitherkeyUporkeyDown.keyString - Equivalent to KeyboardEvent.key.codeString - Equivalent to KeyboardEvent.code.isAutoRepeatBoolean - Equivalent to KeyboardEvent.repeat.isComposingBoolean - Equivalent to KeyboardEvent.isComposing.shiftBoolean - Equivalent to KeyboardEvent.shiftKey.controlBoolean - Equivalent to KeyboardEvent.controlKey.altBoolean - Equivalent to KeyboardEvent.altKey.metaBoolean - Equivalent to KeyboardEvent.metaKey.
Emitted before dispatching the keydown and keyup events in the page.
Calling event.preventDefault will prevent the page keydown/keyup events
and the menu shortcuts.
To only prevent the menu shortcuts, use
setIgnoreMenuShortcuts:
const { BrowserWindow } = require('electron')
const win = new BrowserWindow({ width: 800, height: 600 })
win.webContents.on('before-input-event', (event, input) => {
// For example, only enable application menu keyboard shortcuts when
// Ctrl/Cmd are down.
win.webContents.setIgnoreMenuShortcuts(!input.control && !input.meta)
})
Event: 'enter-html-full-screen'
Emitted when the window enters a full-screen state triggered by HTML API.
Event: 'leave-html-full-screen'
Emitted when the window leaves a full-screen state triggered by HTML API.
Event: 'zoom-changed'
Returns:
eventEventzoomDirectionString - Can beinorout.
Emitted when the user is requesting to change the zoom level using the mouse wheel.
Event: 'devtools-opened'
Emitted when DevTools is opened.
Event: 'devtools-closed'
Emitted when DevTools is closed.
Event: 'devtools-focused'
Emitted when DevTools is focused / opened.
Event: 'certificate-error'
Returns:
eventEventurlStringerrorString - The error code.certificateCertificatecallbackFunctionisTrustedBoolean - Indicates whether the certificate can be considered trusted.
Emitted when failed to verify the certificate for url.
The usage is the same with the certificate-error event of
app.
Event: 'select-client-certificate'
Returns:
eventEventurlURLcertificateListCertificate[]callbackFunctioncertificateCertificate - Must be a certificate from the given list.
Emitted when a client certificate is requested.
The usage is the same with the select-client-certificate event of
app.
Event: 'login'
Returns:
eventEventauthenticationResponseDetailsObjecturlURL
authInfoObjectisProxyBooleanschemeStringhostStringportIntegerrealmString
callbackFunctionusernameString (optional)passwordString (optional)
Emitted when webContents wants to do basic auth.
The usage is the same with the login event of app.
Event: 'found-in-page'
Returns:
eventEventresultObjectrequestIdIntegeractiveMatchOrdinalInteger - Position of the active match.matchesInteger - Number of Matches.selectionAreaRectangle - Coordinates of first match region.finalUpdateBoolean
Emitted when a result is available for
[webContents.findInPage] request.
Event: 'media-started-playing'
Emitted when media starts playing.
Event: 'media-paused'
Emitted when media is paused or done playing.
Event: 'did-change-theme-color'
Returns:
eventEventcolor(String | null) - Theme color is in format of '#rrggbb'. It isnullwhen no theme color is set.
Emitted when a page's theme color changes. This is usually due to encountering a meta tag:
<meta name='theme-color' content='#ff0000'>
Event: 'update-target-url'
Returns:
eventEventurlString
Emitted when mouse moves over a link or the keyboard moves the focus to a link.
Event: 'cursor-changed'
Returns:
eventEventtypeStringimageNativeImage (optional)scaleFloat (optional) - scaling factor for the custom cursor.sizeSize (optional) - the size of theimage.hotspotPoint (optional) - coordinates of the custom cursor's hotspot.
Emitted when the cursor's type changes. The type parameter can be default,
crosshair, pointer, text, wait, help, e-resize, n-resize,
ne-resize, nw-resize, s-resize, se-resize, sw-resize, w-resize,
ns-resize, ew-resize, nesw-resize, nwse-resize, col-resize,
row-resize, m-panning, e-panning, n-panning, ne-panning, nw-panning,
s-panning, se-panning, sw-panning, w-panning, move, vertical-text,
cell, context-menu, alias, progress, nodrop, copy, none,
not-allowed, zoom-in, zoom-out, grab, grabbing or custom.
If the type parameter is custom, the image parameter will hold the custom
cursor image in a NativeImage, and scale, size and hotspot will hold
additional information about the custom cursor.
Event: 'context-menu'
Returns:
eventEventparamsObjectxInteger - x coordinate.yInteger - y coordinate.linkURLString - URL of the link that encloses the node the context menu was invoked on.linkTextString - Text associated with the link. May be an empty string if the contents of the link are an image.pageURLString - URL of the top level page that the context menu was invoked on.frameURLString - URL of the subframe that the context menu was invoked on.srcURLString - Source URL for the element that the context menu was invoked on. Elements with source URLs are images, audio and video.mediaTypeString - Type of the node the context menu was invoked on. Can benone,image,audio,video,canvas,fileorplugin.hasImageContentsBoolean - Whether the context menu was invoked on an image which has non-empty contents.isEditableBoolean - Whether the context is editable.selectionTextString - Text of the selection that the context menu was invoked on.titleTextString - Title text of the selection that the context menu was invoked on.altTextString - Alt text of the selection that the context menu was invoked on.suggestedFilenameString - Suggested filename to be used when saving file through 'Save Link As' option of context menu.selectionRectRectangle - Rect representing the coordinates in the document space of the selection.selectionStartOffsetNumber - Start position of the selection text.referrerPolicyReferrer - The referrer policy of the frame on which the menu is invoked.misspelledWordString - The misspelled word under the cursor, if any.dictionarySuggestionsString[] - An array of suggested words to show the user to replace themisspelledWord. Only available if there is a misspelled word and spellchecker is enabled.frameCharsetString - The character encoding of the frame on which the menu was invoked.inputFieldTypeString - If the context menu was invoked on an input field, the type of that field. Possible values arenone,plainText,password,other.spellcheckEnabledBoolean - If the context is editable, whether or not spellchecking is enabled.menuSourceTypeString - Input source that invoked the context menu. Can benone,mouse,keyboard,touch,touchMenu,longPress,longTap,touchHandle,stylus,adjustSelection, oradjustSelectionReset.mediaFlagsObject - The flags for the media element the context menu was invoked on.inErrorBoolean - Whether the media element has crashed.isPausedBoolean - Whether the media element is paused.isMutedBoolean - Whether the media element is muted.hasAudioBoolean - Whether the media element has audio.isLoopingBoolean - Whether the media element is looping.isControlsVisibleBoolean - Whether the media element's controls are visible.canToggleControlsBoolean - Whether the media element's controls are toggleable.canPrintBoolean - Whether the media element can be printed.canSaveBoolean - Whether or not the media element can be downloaded.canShowPictureInPictureBoolean - Whether the media element can show picture-in-picture.isShowingPictureInPictureBoolean - Whether the media element is currently showing picture-in-picture.canRotateBoolean - Whether the media element can be rotated.canLoopBoolean - Whether the media element can be looped.
editFlagsObject - These flags indicate whether the renderer believes it is able to perform the corresponding action.canUndoBoolean - Whether the renderer believes it can undo.canRedoBoolean - Whether the renderer believes it can redo.canCutBoolean - Whether the renderer believes it can cut.canCopyBoolean - Whether the renderer believes it can copy.canPasteBoolean - Whether the renderer believes it can paste.canDeleteBoolean - Whether the renderer believes it can delete.canSelectAllBoolean - Whether the renderer believes it can select all.canEditRichlyBoolean - Whether the renderer believes it can edit text richly.
Emitted when there is a new context menu that needs to be handled.
Event: 'select-bluetooth-device'
Returns:
eventEventdevicesBluetoothDevice[]callbackFunctiondeviceIdString
Emitted when bluetooth device needs to be selected on call to
navigator.bluetooth.requestDevice. To use navigator.bluetooth api
webBluetooth should be enabled. If event.preventDefault is not called,
first available device will be selected. callback should be called with
deviceId to be selected, passing empty string to callback will
cancel the request.
const { app, BrowserWindow } = require('electron')
let win = null
app.commandLine.appendSwitch('enable-experimental-web-platform-features')
app.whenReady().then(() => {
win = new BrowserWindow({ width: 800, height: 600 })
win.webContents.on('select-bluetooth-device', (event, deviceList, callback) => {
event.preventDefault()
const result = deviceList.find((device) => {
return device.deviceName === 'test'
})
if (!result) {
callback('')
} else {
callback(result.deviceId)
}
})
})
Event: 'paint'
Returns:
eventEventdirtyRectRectangleimageNativeImage - The image data of the whole frame.
Emitted when a new frame is generated. Only the dirty area is passed in the buffer.
const { BrowserWindow } = require('electron')
const win = new BrowserWindow({ webPreferences: { offscreen: true } })
win.webContents.on('paint', (event, dirty, image) => {
// updateBitmap(dirty, image.getBitmap())
})
win.loadURL('http://github.com')
Event: 'devtools-reload-page'
Emitted when the devtools window instructs the webContents to reload
Event: 'will-attach-webview'
Returns:
eventEventwebPreferencesWebPreferences - The web preferences that will be used by the guest page. This object can be modified to adjust the preferences for the guest page.paramsRecord<string, string> - The other<webview>parameters such as thesrcURL. This object can be modified to adjust the parameters of the guest page.
Emitted when a <webview>'s web contents is being attached to this web
contents. Calling event.preventDefault() will destroy the guest page.
This event can be used to configure webPreferences for the webContents
of a <webview> before it's loaded, and provides the ability to set settings
that can't be set via <webview> attributes.
Note: The specified preload script option will appear as preloadURL
(not preload) in the webPreferences object emitted with this event.
Event: 'did-attach-webview'
Returns:
eventEventwebContentsWebContents - The guest web contents that is used by the<webview>.
Emitted when a <webview> has been attached to this web contents.
Event: 'console-message'
Returns:
eventEventlevelInteger - The log level, from 0 to 3. In order it matchesverbose,info,warninganderror.messageString - The actual console messagelineInteger - The line number of the source that triggered this console messagesourceIdString
Emitted when the associated window logs a console message.
Event: 'preload-error'
Returns:
eventEventpreloadPathStringerrorError
Emitted when the preload script preloadPath throws an unhandled exception error.
Event: 'ipc-message'
Returns:
eventEventchannelString...argsany[]
Emitted when the renderer process sends an asynchronous message via ipcRenderer.send().
Event: 'ipc-message-sync'
Returns:
eventEventchannelString...argsany[]
Emitted when the renderer process sends a synchronous message via ipcRenderer.sendSync().
Event: 'desktop-capturer-get-sources'
Returns:
eventEvent
Emitted when desktopCapturer.getSources() is called in the renderer process.
Calling event.preventDefault() will make it return empty sources.
Event: 'remote-require' Deprecated
Returns:
eventIpcMainEventmoduleNameString
Emitted when remote.require() is called in the renderer process.
Calling event.preventDefault() will prevent the module from being returned.
Custom value can be returned by setting event.returnValue.
Event: 'remote-get-global' Deprecated
Returns:
eventIpcMainEventglobalNameString
Emitted when remote.getGlobal() is called in the renderer process.
Calling event.preventDefault() will prevent the global from being returned.
Custom value can be returned by setting event.returnValue.
Event: 'remote-get-builtin' Deprecated
Returns:
eventIpcMainEventmoduleNameString
Emitted when remote.getBuiltin() is called in the renderer process.
Calling event.preventDefault() will prevent the module from being returned.
Custom value can be returned by setting event.returnValue.
Event: 'remote-get-current-window' Deprecated
Returns:
eventIpcMainEvent
Emitted when remote.getCurrentWindow() is called in the renderer process.
Calling event.preventDefault() will prevent the object from being returned.
Custom value can be returned by setting event.returnValue.
Event: 'remote-get-current-web-contents' Deprecated
Returns:
eventIpcMainEvent
Emitted when remote.getCurrentWebContents() is called in the renderer process.
Calling event.preventDefault() will prevent the object from being returned.
Custom value can be returned by setting event.returnValue.
Event: 'preferred-size-changed'
Returns:
eventEventpreferredSizeSize - The minimum size needed to contain the layout of the document—without requiring scrolling.
Emitted when the WebContents preferred size has changed.
This event will only be emitted when enablePreferredSizeMode is set to true
in webPreferences.
Instance Methods
contents.loadURL(url[, options])
urlStringoptionsObject (optional)httpReferrer(String | Referrer) (optional) - An HTTP Referrer url.userAgentString (optional) - A user agent originating the request.extraHeadersString (optional) - Extra headers separated by "\n".postData(UploadRawData[] | UploadFile[]) (optional)baseURLForDataURLString (optional) - Base url (with trailing path separator) for files to be loaded by the data url. This is needed only if the specifiedurlis a data url and needs to load other files.
Returns Promise<void> - the promise will resolve when the page has finished loading
(see did-finish-load), and rejects
if the page fails to load (see
did-fail-load). A noop rejection handler is already attached, which avoids unhandled rejection errors.
Loads the url in the window. The url must contain the protocol prefix,
e.g. the http:// or file://. If the load should bypass http cache then
use the pragma header to achieve it.
const { webContents } = require('electron')
const options = { extraHeaders: 'pragma: no-cache\n' }
webContents.loadURL('https://github.com', options)
contents.loadFile(filePath[, options])
filePathStringoptionsObject (optional)queryRecord<String, String> (optional) - Passed tourl.format().searchString (optional) - Passed tourl.format().hashString (optional) - Passed tourl.format().
Returns Promise<void> - the promise will resolve when the page has finished loading
(see did-finish-load), and rejects
if the page fails to load (see did-fail-load).
Loads the given file in the window, filePath should be a path to
an HTML file relative to the root of your application. For instance
an app structure like this:
| root
| - package.json
| - src
| - main.js
| - index.html
Would require code like this
win.loadFile('src/index.html')
contents.downloadURL(url)
urlString
Initiates a download of the resource at url without navigating. The
will-download event of session will be triggered.
contents.getURL()
Returns String - The URL of the current web page.
const { BrowserWindow } = require('electron')
const win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('http://github.com').then(() => {
const currentURL = win.webContents.getURL()
console.log(currentURL)
})
contents.getTitle()
Returns String - The title of the current web page.
contents.isDestroyed()
Returns Boolean - Whether the web page is destroyed.
contents.focus()
Focuses the web page.
contents.isFocused()
Returns Boolean - Whether the web page is focused.
contents.isLoading()
Returns Boolean - Whether web page is still loading resources.
contents.isLoadingMainFrame()
Returns Boolean - Whether the main frame (and not just iframes or frames within it) is
still loading.
contents.isWaitingForResponse()
Returns Boolean - Whether the web page is waiting for a first-response from the main
resource of the page.
contents.stop()
Stops any pending navigation.
contents.reload()
Reloads the current web page.
contents.reloadIgnoringCache()
Reloads current page and ignores cache.
contents.canGoBack()
Returns Boolean - Whether the browser can go back to previous web page.
contents.canGoForward()
Returns Boolean - Whether the browser can go forward to next web page.
contents.canGoToOffset(offset)
offsetInteger
Returns Boolean - Whether the web page can go to offset.
contents.clearHistory()
Clears the navigation history.
contents.goBack()
Makes the browser go back a web page.
contents.goForward()
Makes the browser go forward a web page.
contents.goToIndex(index)
indexInteger
Navigates browser to the specified absolute web page index.
contents.goToOffset(offset)
offsetInteger
Navigates to the specified offset from the "current entry".
contents.isCrashed()
Returns Boolean - Whether the renderer process has crashed.
contents.forcefullyCrashRenderer()
Forcefully terminates the renderer process that is currently hosting this
webContents. This will cause the render-process-gone event to be emitted
with the reason=killed || reason=crashed. Please note that some webContents share renderer
processes and therefore calling this method may also crash the host process
for other webContents as well.
Calling reload() immediately after calling this
method will force the reload to occur in a new process. This should be used
when this process is unstable or unusable, for instance in order to recover
from the unresponsive event.
contents.on('unresponsive', async () => {
const { response } = await dialog.showMessageBox({
message: 'App X has become unresponsive',
title: 'Do you want to try forcefully reloading the app?',
buttons: ['OK', 'Cancel'],
cancelId: 1
})
if (response === 0) {
contents.forcefullyCrashRenderer()
contents.reload()
}
})
contents.setUserAgent(userAgent)
userAgentString
Overrides the user agent for this web page.
contents.getUserAgent()
Returns String - The user agent for this web page.
contents.insertCSS(css[, options])
cssStringoptionsObject (optional)cssOriginString (optional) - Can be either 'user' or 'author'; Specifying 'user' enables you to prevent websites from overriding the CSS you insert. Default is 'author'.
Returns Promise<String> - A promise that resolves with a key for the inserted CSS that can later be used to remove the CSS via contents.removeInsertedCSS(key).
Injects CSS into the current web page and returns a unique key for the inserted stylesheet.
contents.on('did-finish-load', () => {
contents.insertCSS('html, body { background-color: #f00; }')
})
contents.removeInsertedCSS(key)
keyString
Returns Promise<void> - Resolves if the removal was successful.
Removes the inserted CSS from the current web page. The stylesheet is identified
by its key, which is returned from contents.insertCSS(css).
contents.on('did-finish-load', async () => {
const key = await contents.insertCSS('html, body { background-color: #f00; }')
contents.removeInsertedCSS(key)
})
contents.executeJavaScript(code[, userGesture])
codeStringuserGestureBoolean (optional) - Default isfalse.
Returns Promise<any> - A promise that resolves with the result of the executed code
or is rejected if the result of the code is a rejected promise.
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.
Code execution will be suspended until web page stop loading.
contents.executeJavaScript('fetch("https://jsonplaceholder.typicode.com/users/1").then(resp => resp.json())', true)
.then((result) => {
console.log(result) // Will be the JSON object from the fetch call
})
contents.executeJavaScriptInIsolatedWorld(worldId, scripts[, userGesture])
worldIdInteger - The ID of the world to run the javascript in,0is the default world,999is the world used by Electron'scontextIsolationfeature. You can provide any integer here.scriptsWebSource[]userGestureBoolean (optional) - Default isfalse.
Returns Promise<any> - A promise that resolves with the result of the executed code
or is rejected if the result of the code is a rejected promise.
Works like executeJavaScript but evaluates scripts in an isolated context.
contents.setIgnoreMenuShortcuts(ignore)
ignoreBoolean
Ignore application menu shortcuts while this web contents is focused.
contents.setWindowOpenHandler(handler)
-
handlerFunction<{action: 'deny'} | {action: 'allow', overrideBrowserWindowOptions?: BrowserWindowConstructorOptions}>detailsObjecturlString - The resolved version of the URL passed towindow.open(). e.g. opening a window withwindow.open('foo')will yield something likehttps://the-origin/the/current/path/foo.frameNameString - Name of the window provided inwindow.open()featuresString - Comma separated list of window features provided towindow.open().
Returns
{action: 'deny'} | {action: 'allow', overrideBrowserWindowOptions?: BrowserWindowConstructorOptions}-denycancels the creation of the new window.allowwill allow the new window to be created. SpecifyingoverrideBrowserWindowOptionsallows customization of the created window. Returning an unrecognized value such as a null, undefined, or an object without a recognized 'action' value will result in a console error and have the same effect as returning{action: 'deny'}.
Called before creating a window when window.open() is called from the
renderer. See window.open() for more details and how to use this in conjunction with did-create-window.
contents.setAudioMuted(muted)
mutedBoolean
Mute the audio on the current web page.
contents.isAudioMuted()
Returns Boolean - Whether this page has been muted.
contents.isCurrentlyAudible()
Returns Boolean - Whether audio is currently playing.
contents.setZoomFactor(factor)
factorDouble - Zoom factor; default is 1.0.
Changes the zoom factor to the specified factor. Zoom factor is zoom percent divided by 100, so 300% = 3.0.
The factor must be greater than 0.0.
contents.getZoomFactor()
Returns Number - the current zoom factor.
contents.setZoomLevel(level)
levelNumber - Zoom level.
Changes the zoom level to the specified level. The original size is 0 and each
increment above or below represents zooming 20% larger or smaller to default
limits of 300% and 50% of original size, respectively. The formula for this is
scale := 1.2 ^ level.
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.
contents.getZoomLevel()
Returns Number - the current zoom level.
contents.setVisualZoomLevelLimits(minimumLevel, maximumLevel)
minimumLevelNumbermaximumLevelNumber
Returns Promise<void>
Sets the maximum and minimum pinch-to-zoom level.
Note
: Visual zoom is disabled by default in Electron. To re-enable it, call:
contents.setVisualZoomLevelLimits(1, 3)
contents.undo()
Executes the editing command undo in web page.
contents.redo()
Executes the editing command redo in web page.
contents.cut()
Executes the editing command cut in web page.
contents.copy()
Executes the editing command copy in web page.
contents.copyImageAt(x, y)
xIntegeryInteger
Copy the image at the given position to the clipboard.
contents.paste()
Executes the editing command paste in web page.
contents.pasteAndMatchStyle()
Executes the editing command pasteAndMatchStyle in web page.
contents.delete()
Executes the editing command delete in web page.
contents.selectAll()
Executes the editing command selectAll in web page.
contents.unselect()
Executes the editing command unselect in web page.
contents.replace(text)
textString
Executes the editing command replace in web page.
contents.replaceMisspelling(text)
textString
Executes the editing command replaceMisspelling in web page.
contents.insertText(text)
textString
Returns Promise<void>
Inserts text to the focused element.
contents.findInPage(text[, options])
textString - Content to be searched, must not be empty.optionsObject (optional)forwardBoolean (optional) - Whether to search forward or backward, defaults totrue.findNextBoolean (optional) - Whether the operation is first request or a follow up, defaults tofalse.matchCaseBoolean (optional) - Whether search should be case-sensitive, defaults tofalse.
Returns Integer - The request id used for the request.
Starts a request to find all matches for the text in the web page. The result of the request
can be obtained by subscribing to found-in-page event.
contents.stopFindInPage(action)
actionString - Specifies the action to take place when ending [webContents.findInPage] request.clearSelection- Clear the selection.keepSelection- Translate the selection into a normal selection.activateSelection- Focus and click the selection node.
Stops any findInPage request for the webContents with the provided action.
const { webContents } = require('electron')
webContents.on('found-in-page', (event, result) => {
if (result.finalUpdate) webContents.stopFindInPage('clearSelection')
})
const requestId = webContents.findInPage('api')
console.log(requestId)
contents.capturePage([rect])
rectRectangle (optional) - The area of the page to be captured.
Returns Promise<NativeImage> - Resolves with a NativeImage
Captures a snapshot of the page within rect. Omitting rect will capture the whole visible page.
contents.isBeingCaptured()
Returns Boolean - Whether this page is being captured. It returns true when the capturer count
is large then 0.
contents.incrementCapturerCount([size, stayHidden, stayAwake])
sizeSize (optional) - The preferred size for the capturer.stayHiddenBoolean (optional) - Keep the page hidden instead of visible.stayAwakeBoolean (optional) - Keep the system awake instead of allowing it to sleep.
Increase the capturer count by one. The page is considered visible when its browser window is
hidden and the capturer count is non-zero. If you would like the page to stay hidden, you should ensure that stayHidden is set to true.
This also affects the Page Visibility API.
contents.decrementCapturerCount([stayHidden, stayAwake])
stayHiddenBoolean (optional) - Keep the page in hidden state instead of visible.stayAwakeBoolean (optional) - Keep the system awake instead of allowing it to sleep.
Decrease the capturer count by one. The page will be set to hidden or occluded state when its
browser window is hidden or occluded and the capturer count reaches zero. If you want to
decrease the hidden capturer count instead you should set stayHidden to true.
contents.getPrinters()
Get the system printer list.
Returns PrinterInfo[]
contents.print([options], [callback])
optionsObject (optional)silentBoolean (optional) - Don't ask user for print settings. Default isfalse.printBackgroundBoolean (optional) - Prints the background color and image of the web page. Default isfalse.deviceNameString (optional) - Set the printer device name to use. Must be the system-defined name and not the 'friendly' name, e.g 'Brother_QL_820NWB' and not 'Brother QL-820NWB'.colorBoolean (optional) - Set whether the printed web page will be in color or grayscale. Default istrue.marginsObject (optional)marginTypeString (optional) - Can bedefault,none,printableArea, orcustom. Ifcustomis chosen, you will also need to specifytop,bottom,left, andright.topNumber (optional) - The top margin of the printed web page, in pixels.bottomNumber (optional) - The bottom margin of the printed web page, in pixels.leftNumber (optional) - The left margin of the printed web page, in pixels.rightNumber (optional) - The right margin of the printed web page, in pixels.
landscapeBoolean (optional) - Whether the web page should be printed in landscape mode. Default isfalse.scaleFactorNumber (optional) - The scale factor of the web page.pagesPerSheetNumber (optional) - The number of pages to print per page sheet.collateBoolean (optional) - Whether the web page should be collated.copiesNumber (optional) - The number of copies of the web page to print.pageRangesObject[] (optional) - The page range to print. On macOS, only one range is honored.fromNumber - Index of the first page to print (0-based).toNumber - Index of the last page to print (inclusive) (0-based).
duplexModeString (optional) - Set the duplex mode of the printed web page. Can besimplex,shortEdge, orlongEdge.dpiRecord<string, number> (optional)horizontalNumber (optional) - The horizontal dpi.verticalNumber (optional) - The vertical dpi.
headerString (optional) - String to be printed as page header.footerString (optional) - String to be printed as page footer.pageSizeString | Size (optional) - Specify page size of the printed document. Can beA3,A4,A5,Legal,Letter,Tabloidor an Object containingheight.
callbackFunction (optional)successBoolean - Indicates success of the print call.failureReasonString - Error description called back if the print fails.
When a custom pageSize is passed, Chromium attempts to validate platform specific minimum values for width_microns and height_microns. Width and height must both be minimum 353 microns but may be higher on some operating systems.
Prints window's web page. When silent is set to true, Electron will pick
the system's default printer if deviceName is empty and the default settings for printing.
Use page-break-before: always; CSS style to force to print to a new page.
Example usage:
const options = {
silent: true,
deviceName: 'My-Printer',
pageRanges: [{
from: 0,
to: 1
}]
}
win.webContents.print(options, (success, errorType) => {
if (!success) console.log(errorType)
})
contents.printToPDF(options)
optionsObjectheaderFooterRecord<string, string> (optional) - the header and footer for the PDF.titleString - The title for the PDF header.urlString - the url for the PDF footer.
landscapeBoolean (optional) -truefor landscape,falsefor portrait.marginsTypeInteger (optional) - Specifies the type of margins to use. Uses 0 for default margin, 1 for no margin, and 2 for minimum margin.scaleFactorNumber (optional) - The scale factor of the web page. Can range from 0 to 100.pageRangesRecord<string, number> (optional) - The page range to print.fromNumber - Index of the first page to print (0-based).toNumber - Index of the last page to print (inclusive) (0-based).
pageSizeString | Size (optional) - Specify page size of the generated PDF. Can beA3,A4,A5,Legal,Letter,Tabloidor an Object containingheightandwidthin microns.printBackgroundBoolean (optional) - Whether to print CSS backgrounds.printSelectionOnlyBoolean (optional) - Whether to print selection only.
Returns Promise<Buffer> - Resolves with the generated PDF data.
Prints window's web page as PDF with Chromium's preview printing custom settings.
The landscape will be ignored if @page CSS at-rule is used in the web page.
By default, an empty options will be regarded as:
{
marginsType: 0,
printBackground: false,
printSelectionOnly: false,
landscape: false,
pageSize: 'A4',
scaleFactor: 100
}
Use page-break-before: always; CSS style to force to print to a new page.
An example of webContents.printToPDF:
const { BrowserWindow } = require('electron')
const fs = require('fs')
const path = require('path')
const os = require('os')
const win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('http://github.com')
win.webContents.on('did-finish-load', () => {
// Use default printing options
win.webContents.printToPDF({}).then(data => {
const pdfPath = path.join(os.homedir(), 'Desktop', 'temp.pdf')
fs.writeFile(pdfPath, data, (error) => {
if (error) throw error
console.log(`Wrote PDF successfully to ${pdfPath}`)
})
}).catch(error => {
console.log(`Failed to write PDF to ${pdfPath}: `, error)
})
})
contents.addWorkSpace(path)
pathString
Adds the specified path to DevTools workspace. Must be used after DevTools creation:
const { BrowserWindow } = require('electron')
const win = new BrowserWindow()
win.webContents.on('devtools-opened', () => {
win.webContents.addWorkSpace(__dirname)
})
contents.removeWorkSpace(path)
pathString
Removes the specified path from DevTools workspace.
contents.setDevToolsWebContents(devToolsWebContents)
devToolsWebContentsWebContents
Uses the devToolsWebContents as the target WebContents to show devtools.
The devToolsWebContents must not have done any navigation, and it should not
be used for other purposes after the call.
By default Electron manages the devtools by creating an internal WebContents
with native view, which developers have very limited control of. With the
setDevToolsWebContents method, developers can use any WebContents to show
the devtools in it, including BrowserWindow, BrowserView and <webview>
tag.
Note that closing the devtools does not destroy the devToolsWebContents, it
is caller's responsibility to destroy devToolsWebContents.
An example of showing devtools in a <webview> tag:
<html>
<head>
<style type="text/css">
* { margin: 0; }
#browser { height: 70%; }
#devtools { height: 30%; }
</style>
</head>
<body>
<webview id="browser" src="https://github.com"></webview>
<webview id="devtools" src="about:blank"></webview>
<script>
const { ipcRenderer } = require('electron')
const emittedOnce = (element, eventName) => new Promise(resolve => {
element.addEventListener(eventName, event => resolve(event), { once: true })
})
const browserView = document.getElementById('browser')
const devtoolsView = document.getElementById('devtools')
const browserReady = emittedOnce(browserView, 'dom-ready')
const devtoolsReady = emittedOnce(devtoolsView, 'dom-ready')
Promise.all([browserReady, devtoolsReady]).then(() => {
const targetId = browserView.getWebContentsId()
const devtoolsId = devtoolsView.getWebContentsId()
ipcRenderer.send('open-devtools', targetId, devtoolsId)
})
</script>
</body>
</html>
// Main process
const { ipcMain, webContents } = require('electron')
ipcMain.on('open-devtools', (event, targetContentsId, devtoolsContentsId) => {
const target = webContents.fromId(targetContentsId)
const devtools = webContents.fromId(devtoolsContentsId)
target.setDevToolsWebContents(devtools)
target.openDevTools()
})
An example of showing devtools in a BrowserWindow:
const { app, BrowserWindow } = require('electron')
let win = null
let devtools = null
app.whenReady().then(() => {
win = new BrowserWindow()
devtools = new BrowserWindow()
win.loadURL('https://github.com')
win.webContents.setDevToolsWebContents(devtools.webContents)
win.webContents.openDevTools({ mode: 'detach' })
})
contents.openDevTools([options])
optionsObject (optional)modeString - Opens the devtools with specified dock state, can beright,bottom,undocked,detach. Defaults to last used dock state. Inundockedmode it's possible to dock back. Indetachmode it's not.activateBoolean (optional) - Whether to bring the opened devtools window to the foreground. The default istrue.
Opens the devtools.
When contents is a <webview> tag, the mode would be detach by default,
explicitly passing an empty mode can force using last used dock state.
contents.closeDevTools()
Closes the devtools.
contents.isDevToolsOpened()
Returns Boolean - Whether the devtools is opened.
contents.isDevToolsFocused()
Returns Boolean - Whether the devtools view is focused .
contents.toggleDevTools()
Toggles the developer tools.
contents.inspectElement(x, y)
xIntegeryInteger
Starts inspecting element at position (x, y).
contents.inspectSharedWorker()
Opens the developer tools for the shared worker context.
contents.inspectSharedWorkerById(workerId)
workerIdString
Inspects the shared worker based on its ID.
contents.getAllSharedWorkers()
Returns SharedWorkerInfo[] - Information about all Shared Workers.
contents.inspectServiceWorker()
Opens the developer tools for the service worker context.
contents.send(channel, ...args)
channelString...argsany[]
Send an asynchronous message to the renderer process via channel, along with
arguments. Arguments will be serialized with the Structured Clone
Algorithm, just like postMessage, so prototype chains will not be
included. Sending Functions, Promises, Symbols, WeakMaps, or WeakSets will
throw an exception.
Note
: Sending non-standard JavaScript types such as DOM objects or special Electron objects will throw an exception.
The renderer process can handle the message by listening to channel with the
ipcRenderer module.
An example of sending messages from the main process to the renderer process:
// In the main process.
const { app, BrowserWindow } = require('electron')
let win = null
app.whenReady().then(() => {
win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL(`file://${__dirname}/index.html`)
win.webContents.on('did-finish-load', () => {
win.webContents.send('ping', 'whoooooooh!')
})
})
<!-- index.html -->
<html>
<body>
<script>
require('electron').ipcRenderer.on('ping', (event, message) => {
console.log(message) // Prints 'whoooooooh!'
})
</script>
</body>
</html>
contents.sendToFrame(frameId, channel, ...args)
frameIdInteger | [number, number] - the ID of the frame to send to, or a pair of[processId, frameId]if the frame is in a different process to the main frame.channelString...argsany[]
Send an asynchronous message to a specific frame in a renderer process via
channel, along with arguments. Arguments will be serialized with the
Structured Clone Algorithm, just like postMessage, so prototype
chains will not be included. Sending Functions, Promises, Symbols, WeakMaps, or
WeakSets will throw an exception.
NOTE: Sending non-standard JavaScript types such as DOM objects or special Electron objects will throw an exception.
The renderer process can handle the message by listening to channel with the
ipcRenderer module.
If you want to get the frameId of a given renderer context you should use
the webFrame.routingId value. E.g.
// In a renderer process
console.log('My frameId is:', require('electron').webFrame.routingId)
You can also read frameId from all incoming IPC messages in the main process.
// In the main process
ipcMain.on('ping', (event) => {
console.info('Message came from frameId:', event.frameId)
})
contents.postMessage(channel, message, [transfer])
channelStringmessageanytransferMessagePortMain[] (optional)
Send a message to the renderer process, optionally transferring ownership of
zero or more [MessagePortMain][] objects.
The transferred MessagePortMain objects will be available in the renderer
process by accessing the ports property of the emitted event. When they
arrive in the renderer, they will be native DOM MessagePort objects.
For example:
// Main process
const { port1, port2 } = new MessageChannelMain()
webContents.postMessage('port', { message: 'hello' }, [port1])
// Renderer process
ipcRenderer.on('port', (e, msg) => {
const [port] = e.ports
// ...
})
contents.enableDeviceEmulation(parameters)
parametersObjectscreenPositionString - Specify the screen type to emulate (default:desktop):desktop- Desktop screen type.mobile- Mobile screen type.
screenSizeSize - Set the emulated screen size (screenPosition == mobile).viewPositionPoint - Position the view on the screen (screenPosition == mobile) (default:{ x: 0, y: 0 }).deviceScaleFactorInteger - Set the device scale factor (if zero defaults to original device scale factor) (default:0).viewSizeSize - Set the emulated view size (empty means no override)scaleFloat - Scale of emulated view inside available space (not in fit to view mode) (default:1).
Enable device emulation with the given parameters.
contents.disableDeviceEmulation()
Disable device emulation enabled by webContents.enableDeviceEmulation.
contents.sendInputEvent(inputEvent)
inputEventMouseInputEvent | MouseWheelInputEvent | KeyboardInputEvent
Sends an input event to the page.
Note: The BrowserWindow containing the contents needs to be focused for
sendInputEvent() to work.
contents.beginFrameSubscription([onlyDirty ,]callback)
onlyDirtyBoolean (optional) - Defaults tofalse.callbackFunctionimageNativeImagedirtyRectRectangle
Begin subscribing for presentation events and captured frames, the callback
will be called with callback(image, dirtyRect) when there is a presentation
event.
The image is an instance of NativeImage that stores the
captured frame.
The dirtyRect is an object with x, y, width, height properties that
describes which part of the page was repainted. If onlyDirty is set to
true, image will only contain the repainted area. onlyDirty defaults to
false.
contents.endFrameSubscription()
End subscribing for frame presentation events.
contents.startDrag(item)
itemObjectfileString[] | String - The path(s) to the file(s) being dragged.iconNativeImage | String - The image must be non-empty on macOS.
Sets the item as dragging item for current drag-drop operation, file is the
absolute path of the file to be dragged, and icon is the image showing under
the cursor when dragging.
contents.savePage(fullPath, saveType)
fullPathString - The full file path.saveTypeString - Specify the save type.HTMLOnly- Save only the HTML of the page.HTMLComplete- Save complete-html page.MHTML- Save complete-html page as MHTML.
Returns Promise<void> - resolves if the page is saved.
const { BrowserWindow } = require('electron')
const win = new BrowserWindow()
win.loadURL('https://github.com')
win.webContents.on('did-finish-load', async () => {
win.webContents.savePage('/tmp/test.html', 'HTMLComplete').then(() => {
console.log('Page was saved successfully.')
}).catch(err => {
console.log(err)
})
})
contents.showDefinitionForSelection() macOS
Shows pop-up dictionary that searches the selected word on the page.
contents.isOffscreen()
Returns Boolean - Indicates whether offscreen rendering is enabled.
contents.startPainting()
If offscreen rendering is enabled and not painting, start painting.
contents.stopPainting()
If offscreen rendering is enabled and painting, stop painting.
contents.isPainting()
Returns Boolean - If offscreen rendering is enabled returns whether it is currently painting.
contents.setFrameRate(fps)
fpsInteger
If offscreen rendering is enabled sets the frame rate to the specified number. Only values between 1 and 240 are accepted.
contents.getFrameRate()
Returns Integer - If offscreen rendering is enabled returns the current frame rate.
contents.invalidate()
Schedules a full repaint of the window this web contents is in.
If offscreen rendering is enabled invalidates the frame and generates a new
one through the 'paint' event.
contents.getWebRTCIPHandlingPolicy()
Returns String - Returns the WebRTC IP Handling Policy.
contents.setWebRTCIPHandlingPolicy(policy)
policyString - Specify the WebRTC IP Handling Policy.default- Exposes user's public and local IPs. This is the default behavior. When this policy is used, WebRTC has the right to enumerate all interfaces and bind them to discover public interfaces.default_public_interface_only- Exposes user's public IP, but does not expose user's local IP. When this policy is used, WebRTC should only use the default route used by http. This doesn't expose any local addresses.default_public_and_private_interfaces- Exposes user's public and local IPs. When this policy is used, WebRTC should only use the default route used by http. This also exposes the associated default private address. Default route is the route chosen by the OS on a multi-homed endpoint.disable_non_proxied_udp- Does not expose public or local IPs. When this policy is used, WebRTC should only use TCP to contact peers or servers unless the proxy server supports UDP.
Setting the WebRTC IP handling policy allows you to control which IPs are exposed via WebRTC. See BrowserLeaks for more details.
contents.getOSProcessId()
Returns Integer - The operating system pid of the associated renderer
process.
contents.getProcessId()
Returns Integer - The Chromium internal pid of the associated renderer. Can
be compared to the frameProcessId passed by frame specific navigation events
(e.g. did-frame-navigate)
contents.takeHeapSnapshot(filePath)
filePathString - Path to the output file.
Returns Promise<void> - Indicates whether the snapshot has been created successfully.
Takes a V8 heap snapshot and saves it to filePath.
contents.getBackgroundThrottling()
Returns Boolean - whether or not this WebContents will throttle animations and timers
when the page becomes backgrounded. This also affects the Page Visibility API.
contents.setBackgroundThrottling(allowed)
allowedBoolean
Controls whether or not this WebContents will throttle animations and timers when the page becomes backgrounded. This also affects the Page Visibility API.
contents.getType()
Returns String - the type of the webContent. Can be backgroundPage, window, browserView, remote, webview or offscreen.
Instance Properties
contents.audioMuted
A Boolean property that determines whether this page is muted.
contents.userAgent
A String property that determines the user agent for this web page.
contents.zoomLevel
A Number property that determines the zoom level for this web contents.
The original size is 0 and each increment above or below represents zooming 20% larger or smaller to default limits of 300% and 50% of original size, respectively. The formula for this is scale := 1.2 ^ level.
contents.zoomFactor
A Number property that determines the zoom factor for this web contents.
The zoom factor is the zoom percent divided by 100, so 300% = 3.0.
contents.frameRate
An Integer property that sets the frame rate of the web contents to the specified number.
Only values between 1 and 240 are accepted.
Only applicable if offscreen rendering is enabled.
contents.id Readonly
A Integer representing the unique ID of this WebContents. Each ID is unique among all WebContents instances of the entire Electron application.
contents.session Readonly
A Session used by this webContents.
contents.hostWebContents Readonly
A WebContents instance that might own this WebContents.
contents.devToolsWebContents Readonly
A WebContents | null property that represents the of DevTools WebContents associated with a given WebContents.
Note: Users should never store this object because it may become null
when the DevTools has been closed.
contents.debugger Readonly
A Debugger instance for this webContents.
contents.backgroundThrottling
A Boolean property that determines whether or not this WebContents will throttle animations and timers
when the page becomes backgrounded. This also affects the Page Visibility API.
contents.mainFrame Readonly
A WebFrameMain property that represents the top frame of the page's frame hierarchy.