Microsoft.Web.WebView2.Core
Represents a client certificate. Gives access to a certificate's metadata.
Converts this to a X509Certificate2.
An object created using PEM encoded data from
this object.
The valid date and time for the certificate since the UNIX epoc.
The valid date and time for the certificate since the UNIX epoc.
Subject of the certificate.
Name of the certificate authority that issued the certificate.
DER encoded serial number of the certificate. Read more about DER at [RFC 7468 DER](https://tools.ietf.org/html/rfc7468#appendix-B).
Display name for a certificate.
Returns list of PEM encoded client certificate issuer chain. In this list first element is the current certificate followed by intermediate1, intermediate2...intermediateN-1. Root certificate is the last element in the list.
Kind of a certificate. See for descriptions.
PEM encoded data for the certificate. Returns Base64 encoding of DER encoded certificate. Read more about PEM at [RFC 1421 Privacy Enhanced Mail](https://tools.ietf.org/html/rfc1421).
Browser version values from /chrome/VERSION
Product Version
This class is the owner of the object, and
provides support for resizing, showing and hiding, focusing, and other
functionality related to windowing and composition.
The owns the , and if all references to the go away, the WebView will be closed.
The owner of the object that provides support for resizing, showing and hiding, focusing, and other functionality related to windowing and composition.
The CoreWebView2Controller owns the , and if all references to the go away, the WebView is closed.
The owner of the object that provides support for resizing, showing and hiding, focusing, and other functionality related to windowing and composition.
The CoreWebView2Controller owns the , and if all references to the go away, the WebView is closed.
The owner of the object that provides support for resizing, showing and hiding, focusing, and other functionality related to windowing and composition.
The CoreWebView2Controller owns the , and if all references to the go away, the WebView is closed.
Gets the associated with this .
Add .Net specific host object helper for the CoreWebView2 so that it can
figure out whether a member is a method of an object.
Determines whether to show or hide the WebView.
If IsVisible is set to false, the WebView is transparent and is not rendered. However, this does not affect the window containing the WebView (the ParentWindow parameter that was passed to ). If you want that window to disappear too, run or on it directly in addition to modifying this.
WebView as a child window does not get window messages when the top window is minimized or restored. For performance reason, developer should set IsVisible property of the WebView to false when the app window is minimized and back to true when app window is restored. App window can do this by handling SC_MINIMIZE and SC_RESTORE command upon receiving WM_SYSCOMMAND message.
Gets or sets the WebView bounds.
Bounds are relative to the . The app has two ways to position a WebView:
-
Create a child HWND that is the WebView parent HWND. Position the window where the WebView should be. Use (0, 0) for the top-left corner (the offset) of the Bounds of the WebView.
-
Use the top-most window of the app as the WebView parent HWND. For example, to position ebView correctly in the app, set the top-left corner of the Bounds of the WebView.
The values of Bounds are limited by the coordinate space of the host.
Gets or sets the zoom factor for the WebView.
Note that changing zoom factor may cause window.innerWidth or window.innerHeight and page layout to change. A zoom factor that is applied by the host by setting this ZoomFactor property becomes the new default zoom for the WebView. This zoom factor applies across navigations and is the zoom factor WebView is returned to when the user presses Ctrl+0. When the zoom factor is changed by the user (resulting in the app receiving ), that zoom applies only for the current page. Any user applied zoom is only for the current page and is reset on a navigation. Specifying a ZoomFactor less than or equal to 0 is not allowed. WebView also has an internal supported zoom factor range. When a specified zoom factor is out of that range, it is normalized to be within the range, and a event is raised for the real applied zoom factor. When this range normalization happens, this reports the zoom factor specified during the previous modification of the ZoomFactor property until the event is received after WebView applies the normalized zoom factor.
Gets the parent window provided by the app or sets the parent window that this WebView is using to render content.
It initially returns the ParentWindow passed into . Setting the property causes the WebView to re-parent the main WebView window to the newly provided window.
ZoomFactorChanged is raised when the property changes.
The event may be raised because the property was modified, or due to the user manually modifying the zoom. When it is modified using the property, the internal zoom factor is updated immediately and no ZoomFactorChanged event is raised. WebView associates the last used zoom factor for each site. It is possible for the zoom factor to change when navigating to a different page. When the zoom factor changes due to a navigation change, the ZoomFactorChanged event is raised right after the event.
MoveFocusRequested is raised when user tries to tab out of the WebView.
The focus of the WebView has not changed when this event is raised.
GotFocus is raised when WebView gets focus.
LostFocus is raised when WebView loses focus.
In the case where event is raised, the focus is still on WebView when event is raised. LostFocus is only raised afterwards when code of the app or default action of event sets focus away from WebView.
AcceleratorKeyPressed is raised when an accelerator key or key combo is pressed or released while the WebView is focused.
A key is considered an accelerator if either of the following conditions are true:
-
Ctrl or Alt is currently being held.
-
The pressed key does not map to a character.
A few specific keys are never considered accelerators, such as Shift. The Escape key is always considered an accelerator.
Autorepeated key events caused by holding the key down will also raise this event. Filter out the auto-repeated key events by verifying or .
In windowed mode, this event is synchronous. Until you set to true or the event handler returns, the browser process is blocked and outgoing cross-process COM calls will fail with RPC_E_CANTCALLOUT_ININPUTSYNCCALL. All methods work, however.
In windowless mode, the event is asynchronous. Further input do not reach the browser until the event handler returns or is set to true, but the browser process is not blocked, and outgoing COM calls work normally.
It is recommended to set to true as early as you are able to know that you want to handle the accelerator key.
Updates and properties at the same time.
The bounds to be updated.
The zoom factor to be updated.
This operation is atomic from the perspective of the host. After returning from this function, the and properties are both updated if the function is successful, or neither is updated if the function fails. If and are both updated by the same scale (for example, and are both doubled), then the page does not display a change in window.innerWidth or window.innerHeight and the WebView renders the content at the new size and zoom without intermediate renderings. This function also updates just one of or by passing in the new value for one and the current value for the other.
Moves focus into WebView.
The reason for moving focus.
WebView will get focus and focus will be set to correspondent element in the page hosted in the WebView. For reason, focus is set to previously focused element or the default element if no previously focused element exists. For reason, focus is set to the first element. For reason, focus is set to the last element. WebView changes focus through user interaction including selecting into a WebView or Tab into it. For tabbing, the app runs MoveFocus with or to align with Tab and Shift+Tab respectively when it decides the WebView is the next tabbable element.
Tells WebView that the main WebView parent (or any ancestor) HWND moved.
This is a notification separate from . This is needed for accessibility and certain dialogs in WebView to work correctly.
Closes the WebView and cleans up the underlying browser instance.
Cleaning up the browser instance releases the resources powering the WebView. The browser instance is shut down if no other WebViews are using it.
After running Close, all methods fail and event handlers stop running. Specifically, the WebView releases the associated references to any associated event handlers when Close is run.
Close is implicitly run when the loses the final reference and is destructed. But it is best practice to explicitly run Close to avoid any accidental cycle of references between the WebView and the app code. Specifically, if you capture a reference to the WebView in an event handler you create a reference cycle between the WebView and the event handler. Run Close to break the cycle by releasing all event handlers. But to avoid the situation, it is best to both explicitly run Close on the WebView and to not capture a reference to the WebView to ensure the WebView is cleaned up correctly.
Gets or sets the WebView default background color.
The DefaultBackgroundColor is the color that renders underneath all web content. This means WebView renders this color when there is no web content loaded such as before the initial navigation or between navigations. This also means web pages with undefined css background properties or background properties containing transparent pixels will render their contents over this color. Web pages with defined and opaque background properties that span the page will obscure the DefaultBackgroundColor and display normally. The default value for this property is white to resemble the native browser experience. Currently this API only supports opaque colors and transparency. It will fail for colors with alpha values that don't equal 0 or 255 ie. translucent colors are not supported. It also does not support transparency on Windows 7. On Windows 7, setting DefaultBackgroundColor to a Color with an Alpha value other than 255 will result in failure. On any OS above Win7, choosing a transparent color will result in showing hosting app content. This means webpages without explicit background properties defined will render web content over hosting app content.
Gets or sets the WebView rasterization scale.
The rasterization scale is the combination of the monitor DPI scale and text scaling set by the user. This value should be updated when the DPI scale of the app's top level window changes (i.e. monitor DPI scale changes or the window changes monitor) or when the text scale factor of the system changes.
Rasterization scale applies to the WebView content, as well as popups, context menus, scroll bars, and so on. Normal app scaling scenarios should use the property or method.
Determines whether the WebView will detect monitor scale changes.
ShouldDetectMonitorScaleChanges property determines whether the WebView attempts to track monitor DPI scale changes. When true, the WebView will track monitor DPI scale changes, update the property, and fire event. When false, the WebView will not track monitor DPI scale changes, and the app must update the property itself. event will never fire when ShouldDetectMonitorScaleChanges is false.
Gets or sets the WebView bounds mode.
BoundsMode affects how setting the and properties work. Bounds mode can either be in mode or mode.
RasterizationScaleChanged is raised when the property changes.
The event is raised when the Webview detects that the monitor DPI scale has changed, is true, and the Webview has changed the property.
Provides a set of properties that are used to manage a .
Converts this to a System.Net.Cookie.
An object whose , , , , , , and , matches
those , , ,
, , , and of this object.
The values of the properties other than those
specified above remain their default values.
The expiration date and time for the cookie since the UNIX epoch.
Setting the Expires property to
makes this a session cookie, which is its default value.
Get or sets the cookie name.
Gets or sets the cookie value.
Gets the domain for which the cookie is valid.
The default value is the host that this cookie has been received from. Note that, for instance, .bing.com, bing.com, and www.bing.com are considered different domains.
Gets the path for which the cookie is valid.
The default value is "/", which means this cookie will be sent to all pages on the .
Determines whether this cookie is http-only.
Determines the SameSite status of the cookie which represents the enforcement mode of the cookie.
The default value is .
Gets or sets the security level of this cookie.
Determines whether this is a session cookie. The default value isfalse.
Creates, adds or updates, gets, or or view the cookies.
The changes would apply to the context of the user profile. That is, other WebViews under the same user profile could be affected.
Creates a CoreWebView2Cookie object whose params matches those of the given System.Net.Cookie.
A System.Net.Cookie whose params to be used to create a CoreWebView2Cookie.
An object whose , , , , , , and , matches those , , , , , , and of the given object.
The default value for the
property of the returned object is
.
Creates a cookie object with a specified name, value, domain, and path.
One can set other optional properties after cookie creation. This only creates a cookie object and it is not added to the cookie manager until you call . name that starts with whitespace(s) is not allowed.
The name for the to be created. It cannot start with whitespace(s).
Creates a cookie whose params matches those of the specified cookie.
Gets a list of cookies matching the specific URI.
You can modify the cookie objects by calling , and the changes will be applied to the webview.
If uri is empty string or null, all cookies under the same profile are returned.
Adds or updates a cookie with the given cookie data; may overwrite cookies with matching name, domain, and path if they exist.
The to be added or updated.
This method will fail if the domain of the given cookie is not specified.
Deletes a cookie whose name and domain/path pair match those of the specified cookie.
Deletes cookies with matching name and uri.
The name for the cookies to be deleted is required.
If uri is specified, deletes all cookies with the given name where domain and path match provided URI.
Deletes cookies with matching name and domain/path pair.
The name for the cookies to be deleted is required.
If domain is specified, deletes only cookies with the exact domain.
If path is specified, deletes only cookies with the exact path.
Deletes all cookies under the same profile.
This could affect other WebViews under the same user profile.
Represents a download opertaion. Gives access to a download's metadata and supports a user canceling, pausing, or resuming a download.
The estimated end time of the download.
The total bytes to receive count.
The URI of the download.
The Content-Disposition header value from the download's HTTP response. If none, the value is an empty string.
MIME type of the downloaded content.
The number of bytes that have been written to the download file.
The absolute path to the download file, including file name.
Host can change this from .
The state of the download. A download can be in progress, interrupted, or completed.
See for descriptions of states.
The reason why connection with file host was broken.
See for descriptions
of reasons.
Returns true if an interrupted download can be resumed.
Downloads with the following interrupt reasons may automatically
resume without you calling any methods: , , . In these cases progress may be restarted with
set to 0.
Event raised when the bytes received count is updated.
Event raised when the estimated end time changes.
Event raised when the state of the download changes.
Use to get the current state, and to get the reason if the download is interrutped.
Cancels the download.
If canceled, the default downlaod dialog shows that the download was canceled. Host should use if download should be canceled without displaying the default download dialog.
#
Pauses the download.
If paused, the default download dialog shows that the download is paused. No effect if download is already paused. Pausing a download changes the state from in progress to interrupted, with interrupt reason set to .
Resumes a paused download. May also resume a downlaod that was interrupted for another reason if returns true.
Resuming a download changes the state from interrupted to in progress.
This represents the WebView2 Environment.
WebViews created from an environment run on the Browser process specified with environment parameters and objects created from an environment should be used in the same environment. Using it in different environments are not guaranteed to be compatible and may fail.
Creates a WebView2 Environment using the installed or a custom WebView2 Runtime version.
The relative path to the folder that contains a custom version of WebView2 Runtime.
To use a fixed version of the WebView2 Runtime, pass the relative
folder path that contains the fixed version of the WebView2 Runtime
to browserExecutableFolder. To create WebView2 controls that
use the installed version of the WebView2 Runtime that exists on
user machines, pass a null or empty string to
browserExecutableFolder. In this scenario, the API tries to
find a compatible version of the WebView2 Runtime that is installed
on the user machine (first at the machine level, and then per user)
using the selected channel preference. The path of fixed version of
the WebView2 Runtime should not contain \Edge\Application\. When
such a path is used, the API fails with ERROR_NOT_SUPPORTED.
The user data folder location for WebView2.
The path is either an absolute file path or a relative file path
that is interpreted as relative to the compiled code for the
current process. The default user data folder {Executable File
Name}.WebView2 is created in the same directory next to the
compiled code for the app. WebView2 creation fails if the compiled
code is running in a directory in which the process does not have
permission to create a new directory. The app is responsible to
clean up the associated user data folder when it is done.
Options used to create WebView2 Environment.
As a browser process may be shared among WebViews, WebView creation
fails if the specified options does not match the options of
the WebViews that are currently running in the shared browser
process.
The default channel search order is the WebView2 Runtime, Beta, Dev, and
Canary. When an override WEBVIEW2_RELEASE_CHANNEL_PREFERENCE environment
variable or applicable releaseChannelPreference registry value is set to
1, the channel search order is reversed.
To use a fixed version of the WebView2 Runtime, pass the relative
folder path that contains the fixed version of the WebView2 Runtime
to browserExecutableFolder. To create WebView2 controls that
use the installed version of the WebView2 Runtime that exists on
user machines, pass a null or empty string to
browserExecutableFolder. In this scenario, the API tries to
find a compatible version of the WebView2 Runtime that is installed
on the user machine (first at the machine level, and then per user)
using the selected channel preference. The path of fixed version of
the WebView2 Runtime should not contain \Edge\Application\. When
such a path is used, the API fails with the following error.
The , , and may be
overridden by values either specified in environment variables or in
the registry.
When creating a the following environment variables are verified.
-
WEBVIEW2_BROWSER_EXECUTABLE_FOLDER
-
WEBVIEW2_USER_DATA_FOLDER
-
WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS
-
WEBVIEW2_RELEASE_CHANNEL_PREFERENCE
If browser executable folder or user data folder is specified in an
environment variable or in the registry, the specified or values are overridden. If additional browser
arguments are specified in an environment variable or in the
registry, it is appended to the corresponding value in the specified
.
While not strictly overrides, additional environment variables may be set.
Value
Description
-
WEBVIEW2_WAIT_FOR_SCRIPT_DEBUGGER
When found with a non-empty value, this indicates that the WebView
is being launched under a script debugger. In this case, the WebView
issues a Page.waitForDebugger CDP command that runs the
script inside the WebView to pause on launch, until a debugger
issues a corresponding Runtime.runIfWaitingForDebugger CDP
command to resume the runtime.
Note that this environment variable does not have a registry key equivalent.
-
WEBVIEW2_PIPE_FOR_SCRIPT_DEBUGGER
When found with a non-empty value, it indicates that the WebView is
being launched under a script debugger that also supports host apps
that use multiple WebViews. The value is used as the identifier for
a named pipe that is opened and written to when a new WebView is
created by the host app. The payload should match the payload of the
remote-debugging-port JSON target and an external debugger
may use it to attach to a specific WebView instance. The format of
the pipe created by the debugger should be
\\.\pipe\WebView2\Debugger\{app_name}\{pipe_name}, where the
following are true.
- {app_name} is the host app exe file name, for example, WebView2Example.exe
- {pipe_name} is the value set for WEBVIEW2_PIPE_FOR_SCRIPT_DEBUGGER
To enable debugging of the targets identified by the JSON, you must
set the WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS environment
variable to send --remote-debugging-port={port_num}, where
the following is true.
- {port_num} is the port on which the CDP server binds.
If both WEBVIEW2_PIPE_FOR_SCRIPT_DEBUGGER and
WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS environment variables,
the WebViews hosted in your app and associated contents may exposed
to 3rd party apps such as debuggers. Note that this environment
variable does not have a registry key equivalent.
If none of those environment variables exist, then the registry is examined
next.
-
[{Root}]\Software\Policies\Microsoft\Edge\WebView2\BrowserExecutableFolder "{AppId}"=""
-
[{Root}]\Software\Policies\Microsoft\Edge\WebView2\ReleaseChannelPreference "{AppId}"=""
-
[{Root}]\Software\Policies\Microsoft\Edge\WebView2\AdditionalBrowserArguments "{AppId}"=""
-
[{Root}]\Software\Policies\Microsoft\Edge\WebView2\UserDataFolder "{AppId}"=""
Use a group policy under Administrative Templates >
Microsoft Edge WebView2 to configure browser executable folder
and release channel preference.
Value
Description
-
ERROR_DISK_FULL
In the unlikely scenario where some instances of WebView are open during a
browser update, the deletion of the previous WebView2 Runtime may be
blocked. To avoid running out of disk space, a new WebView creation fails
with this error if it detects that too many previous WebView2
Runtime versions exist.
-
WEBVIEW2_MAX_INSTANCES
The default maximum number of WebView2 Runtime versions allowed is 20.
To override the maximum number of the previous WebView2 Runtime versions
allowed, set the value of the following environment variable.
-
ERROR_PRODUCT_UNINSTALLED
If the Webview depends upon an installed WebView2 Runtime version and it is
uninstalled, any subsequent creation fails with this error.
First verify with Root as HKLM and then HKCU. AppId is first set to
the Application User Model ID of the process, then if no corresponding
registry key, the AppId is set to the compiled code name of the process,
or if that is not a registry key then *. If an override registry key is
found, use the browserExecutableFolder and userDataFolder registry
values as replacements and append additionalBrowserArguments registry
values for the corresponding values in the provided .
Gets the browser version info including channel name if it is not the stable channel or WebView2 Runtime.
The relative path to the folder that contains the WebView2 Runtime.
WebView2 Runtime installation is missing.
Compares two instances of browser versions correctly and returns an integer that indicates whether the first instance is older, the same as, or newer than the second instance.
One of the version strings to compare.
The other version string to compare.
An integer that indicates whether the first instance is older, the same as, or newer than the second instance.
Value Type
Condition
-
Less than zero
version1 is older than version2.
-
Zero
version1 is the same as version2.
-
Greater than zero
version1 is newer than version2.
Creates a new object.
The request URI.
The HTTP request method.
The raw request header string delimited by CRLF (optional in last header).
uri parameter must be absolute URI. It's also possible to create this object with null headers string and then use the to construct the headers line by line.
Gets the browser version info of the current , including channel name if it is not the stable channel.
It matches the format of the method. Channel names are beta, dev, and canary.
NewBrowserVersionAvailable is raised when a newer version of the WebView2 Runtime is installed and available using WebView2.
To use the newer version of the browser you must create a new environment and WebView. The event is only raised for new version from the same WebView2 Runtime from which the code is running. When not running with installed WebView2 Runtime, no event is raised.
Because a user data folder is only able to be used by one browser process at a time, if you want to use the same user data folder in the WebViews using the new version of the browser, you must close the environment and instance of WebView that are using the older version of the browser first. Or simply prompt the user to restart the app.
Asynchronously creates a new WebView.
The HWND in which the WebView should be displayed and from which receive input.
The WebView adds a child window to the provided window during WebView creation. Z-order and other things impacted by sibling window order are affected accordingly.
It is recommended that the application set Application User Model ID for the process or the application window. If none is set, during WebView creation a generated Application User Model ID is set to root window of ParentWindow.
It is recommended that the app handles restart manager messages, to gracefully restart it in the case when the app is using the WebView2 Runtime from a certain installation and that installation is being uninstalled. For example, if a user installs a version of the WebView2 Runtime and opts to use another version of the WebView2 Runtime for testing the app, and then uninstalls the 1st version of the WebView2 Runtime without closing the app, the app restarts to allow un-installation to succeed.
When the app retries CreateCoreWebView2ControllerAsync upon failure, it is recommended that the app restarts from creating a new WebView2 Environment. If a WebView2 Runtime update happens, the version associated with a WebView2 Environment may have been removed and causing the object to no longer work. Creating a new WebView2 Environment works since it uses the latest version.
WebView creation fails if a running instance using the same user data folder exists, and the Environment objects have different . For example, if a WebView was created with one , an attempt to create a WebView with a different using the same user data folder fails.
Creates a new object.
HTTP response content as stream.
The HTTP response status code.
The HTTP response reason phrase.
The raw response header string delimited by newline.
It is also possible to create this object with empty headers string and then use the to construct the headers line by line.
Asynchronously creates a new WebView for use with visual hosting.
The HWND in which the app will connect the visual tree of the WebView.
ParentWindow will be the HWND that the app will receive pointer/mouse input meant for the WebView (and will need to use or to forward). If the app moves the WebView visual tree to underneath a different window, then it needs to set to update the new parent HWND of the visual tree.
Set property on the created to provide a visual to host the browser's visual tree.
It is recommended that the application set Application User Model ID for the process or the application window. If none is set, during WebView creation a generated Application User Model ID is set to root window of ParentWindow.
Creates an empty .
The returned needs to be populated with all of the relevant info before calling .
Options used to create WebView2 Environment.
Default values will use your defaulted Edge browser and user data folder.
Initializes a new instance of the CoreWebView2EnvironmentOptions class.
AdditionalBrowserArguments can be specified to change the behavior of the WebView.
The default language that WebView will run with.
The version of the Edge WebView2 Runtime binaries required to be compatible with the calling application.
Set to true if single sign on be enabled using the end user's OS primary account. Defaults to false.
Gets or sets the additional browser arguments to change the behavior of the WebView.
The arguments are passed to the browser process as part of the command. For more information about using command-line switches with Chromium browser processes, navigate to [Run Chromium with Flags](https://aka.ms/RunChromiumWithFlags). The value appended to a switch is appended to the browser process, for example, in --edge-webview-switches=xxx the value is xxx. If you specify a switch that is important to WebView functionality, it is ignore, for example, --user-data-dir. Specific features are disabled internally and blocked from being enabled. If a switch is specified multiple times, only the last instance is used.
A merge of the different values of the same switch is not attempted, except for disabled and enabled features. The features specified by --enable-features and --disable-features will be merged with simple logic:
-
The features are the union of the specified features and built-in features. If a feature is disabled, it is removed from the enabled features list.
If you specify command-line switches and sets this property, the --edge-webview-switches value takes precedence and is processed last. If a switch fails to parse, the switch is ignored. The default state for the operation is to run the browser process with no extra flags.
Gets or sets the default display language for WebView.
It applies to browser UIs such as context menu and dialogs. It also applies to the accept-languages HTTP header that WebView sends to websites. It is in the format of language[-country] where language is the 2-letter code from [ISO 639](https://www.iso.org/iso-639-language-codes.html) and country is the 2-letter code from [ISO 3166](https://www.iso.org/standard/72482.html).
Gets or sets the version of the WebView2 Runtime binaries required to be compatible with the your app.
This defaults to the WebView2 Runtime version that corresponds with the version of the SDK the app is using. The format of this value is the same as the format of the property and other BrowserVersion values. Only the version part of the BrowserVersion value is respected. The channel suffix, if it exists, is ignored. The version of the WebView2 Runtime binaries actually used may be different from the specified TargetCompatibleBrowserVersion. They binaries are only guaranteed to be compatible. Verify the actual version on the property.
Determines whether to enable single sign on with Azure Active Directory (AAD) resources inside WebView using the logged in Windows account and single sign on (SSO) with web sites using Microsoft account associated with the login in Windows account.
The default value is false. Universal Windows Platform apps must also declare enterpriseCloudSSO [restricted capability](/windows/uwp/packaging/app-capability-declarations#restricted-capabilities) for the single sign on (SSO) to work.
CoreWebView2Frame provides direct access to the iframes information and handling.
CoreWebView2Frame provides direct access to the iframes information and handling.
Adds the provided host object to script running in the WebViewFrame with the specified name for the list of the specified origins.
The name of the host object.
The host object to be added to script.
The list of the iframe origins for which host object will be accessible.
The name of the iframe from the iframe html tag declaring it.
NameChanged is raised when the iframe changes its window.name property.
Destroyed event is raised when the iframe corresponding to this object is removed or the document containing that iframe is destroyed.
Remove the host object specified by the name so that it is no longer accessible from JavaScript code in the iframe.
While new access attempts are denied, if the object is already obtained by JavaScript code in the iframe, the JavaScript code continues to have access to that object. Calling this method for a name that is already removed or was never added fails. If the iframe is destroyed this method will return fail also.
Check whether a frame is destroyed. Returns true during the event.
This represents a helper object for Host Objects.
This object helps CoreWebView2 interact with managed Host Objects correctly.
Create a new instance of CoreWebView2HostObjectHelper.
Check whether a member is a method of an object.
The host object to check.
The name of the member to check.
Iterator for a collection of HTTP headers.
Indicate the iterator is initialized or not, default to false.
The isInitialized is used to indicate if the iterator starts for the first time.
It will be used in MoveNext function.
No COM support; throws instead.
No COM support.
Gets the header in in the
or collection at the current
position of the enumerator.
true when the iterator has not run out of headers.
If the collection over which the iterator is iterating is empty or if the iterator has gone past the end of the collection then this is false.
HTTP request headers.
Used to inspect the HTTP request on event and event. It is possible to modify the HTTP request headers from a event, but not from a event.
Returns an enumerator that iterates through the or collection.
Gets the header value matching the name.
The header value matching the name.
Gets the header value matching the name using a .
The header value matching the name.
Checks whether the headers contain an entry that matches the header name.
Whether the headers contain an entry that matches the header name.
Adds or updates header that matches the name.
Removes header that matches the name.
Gets a over the collection of request headers.
HTTP response headers.
Used to construct a for the event.
Returns an enumerator that iterates through the or collection.
Appends header line with name and value.
The header name to be appended.
The header value to be appended.
Checks whether this CoreWebView2HttpResponseHeaders contain entries matching the header name.
The name of the header to seek.
Gets the first header value in the collection matching the name.
The header name.
The first header value in the collection matching the name.
Gets the header values matching the name.
The header name.
Gets a over the collection of entire .
Event args for the CoreWebView2InitializationCompleted event.
Initializes a new instance of the CoreWebView2InitializationCompletedEventArgs class.
Exception that occurred during initialization, or null if initialization was successful.
True if the init task completed successfully.
The exception thrown from the init task. If the task completed successfully, this property is null.
This is used to complete deferrals on event args that support getting deferrals using the GetDeferral method. This class implements .
Wraps in SafeHandle so resources can be released if consumer forgets to call Dispose. Recommended
pattern for any type that is not sealed.
https://docs.microsoft.com/dotnet/api/system.idisposable#idisposable-and-the-inheritance-hierarchy
Protected implementation of Dispose pattern.
Completes the associated deferred event.
Complete should only be run once for each deferral taken.
This represents a helper object for Host Objects.
This object helps CoreWebView2 interact with managed Host Objects correctly.
Check whether a member is a method of an object.
The host object to check.
The name of the member to check.
Constructor
Read at most bufferSize bytes into buffer and return the effective
number of bytes read in bytesReadPtr (unless null).
mscorlib disassembly shows the following MarshalAs parameters
void Read([Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] byte[] pv, int cb, IntPtr pcbRead);
This means marshaling code will have found the size of the array buffer in the parameter bufferSize.
Critical: calls Marshal.WriteInt32 which LinkDemands, takes pointers as input
Move the stream pointer to the specified position.
System.IO.stream supports searching past the end of the stream, like
OLE streams.
newPositionPtr is not an out parameter because the method is required
to accept NULL pointers.
Critical: calls Marshal.WriteInt64 which LinkDemands, takes pointers as input
Sets stream's size.
Obtain stream stats.
STATSG has to be qualified because it is defined both in System.Runtime.InteropServices and
System.Runtime.InteropServices.ComTypes.
The STATSTG structure is shared by streams, storages and byte arrays. Members irrelevant to streams
or not available from System.IO.Stream are not returned, which leaves only cbSize and grfMode as
meaningful and available pieces of information.
grfStatFlag is used to indicate whether the stream name should be returned and is ignored because
this information is unavailable.
Write at most bufferSize bytes from buffer.
Critical: calls Marshal.WriteInt32 which LinkDemands, takes pointers as input
Create a clone.
Not implemented.
Read at most bufferSize bytes from the receiver and write them to targetStream.
Not implemented.
Commit changes.
Only relevant to transacted streams.
Lock at most byteCount bytes starting at offset.
Not supported by System.IO.Stream.
Undo writes performed since last Commit.
Relevant only to transacted streams.
Unlock the specified region.
Not supported by System.IO.Stream.
The exception that is thrown when an WebView2 Runtime installation is missing.
Initializes a new instance of the WebView2RuntimeNotFoundException class.
Initializes a new instance of the WebView2RuntimeNotFoundException class with a specified error message.
The error message that explains the reason for the exception.
Initializes a new instance of the WebView2RuntimeNotFoundException class with a reference to the inner exception that is the cause of this exception.
The exception that is the cause of the current exception.
Initializes a new instance of the WebView2RuntimeNotFoundException class with a specified error message and a reference to the inner exception that is the cause of this exception.
The error message that explains the reason for the exception.
The exception that is the cause of the current exception.
Specifies the web resource request contexts.
Specifies all resources.
Specifies a document resources.
Specifies a CSS resources.
Specifies an image resources.
Specifies another media resource such as a video.
Specifies a font resource.
Specifies a script resource.
Specifies an XML HTTP request.
Specifies a Fetch API communication.
Specifies a TextTrack resource.
Specifies an EventSource API communication.
Specifies a WebSocket API communication.
Specifies a Web App Manifest.
Specifies a Signed HTTP Exchange.
Specifies a Ping request.
Specifies a CSP Violation Report.
Specifies an other resource.
Indicates the error status values for web navigations.
Indicates that an unknown error occurred.
Indicates that the SSL certificate common name does not match the web address.
Indicates that the SSL certificate has expired.
Indicates that the SSL client certificate contains errors.
Indicates that the SSL certificate has been revoked.
Indicates that the SSL certificate is not valid. The certificate may not match the public key pins for the host name, the certificate is signed by an untrusted authority or using a weak sign algorithm, the certificate claimed DNS names violate name constraints, the certificate contains a weak key, the validity period of the certificate is too long, lack of revocation information or revocation mechanism, non-unique host name, lack of certificate transparency information, or the certificate is chained to a [legacy Symantec root](https://security.googleblog.com/2018/03/distrust-of-symantec-pki-immediate.html).
Indicates that the host is unreachable.
Indicates that the connection has timed out.
Indicates that the server returned an invalid or unrecognized response.
Indicates that the connection was stopped.
Indicates that the connection was reset.
Indicates that the Internet connection has been lost.
Indicates that a connection to the destination was not established.
Indicates that the provided host name was not able to be resolved.
Indicates that the operation was canceled.
Indicates that the request redirect failed.
An unexpected error occurred.
Specifies the JavaScript dialog kind used in .
Indicates that the dialog uses window.alert JavaScript function.
Indicates that the dialog uses window.confirm JavaScript function.
Indicates that the dialog uses window.prompt JavaScript function.
Indicates that the dialog uses window.beforeunload JavaScript event.
Specifies the process failure reason used in .
Indicates that an unexpected process failure occurred.
Indicates that the process became unresponsive. This only applies to the main frame's render process.
Indicates that the process was terminated. For example, from Task Manager.
Indicates that the process crashed.
Indicates that the process failed to launch.
Indicates that the process died due to running out of memory.
Specifies the process failure kind used in .
The values in this enum make reference to the process kinds in the Chromium architecture. For more information about what these processes are and what they do, see [Browser Architecture - Inside look at modern web browser](https://developers.google.com/web/updates/2018/09/inside-browser-part1).
Indicates that the browser process ended unexpectedly. The WebView automatically moves to the Closed state. The app has to recreate a new WebView to recover from this failure.
Indicates that the main frame's render process ended unexpectedly. A new render process is created automatically and navigated to an error page. You can use the method to try reload the page that failed.
Indicates that the main frame's render process is unresponsive.
Indicates that a frame-only render process ended unexpectedly. The process exit does not affect the top-level document, only a subset of the subframes within it. The content in these frames is replaced with an error page in the frame.
Indicates that a utility process ended unexpectedly.
Indicates that a sandbox helper process ended unexpectedly.
Indicates that the GPU process ended unexpectedly.
Indicates that a PPAPI plugin process ended unexpectedly.
Indicates that a PPAPI plugin broker process ended unexpectedly.
Indicates that a process of unspecified kind ended unexpectedly.
Pointer event kind used by to convey the kind of pointer event being sent to WebView.
Corresponds to WM_POINTERACTIVATE.
Corresponds to WM_POINTERDOWN.
Corresponds to WM_POINTERENTER.
Corresponds to WM_POINTERLEAVE.
Corresponds to WM_POINTERUP.
Corresponds to WM_POINTERUPDATE.
Specifies the response to a permission request.
Specifies that the default browser behavior is used, which normally prompts users for decision.
Specifies that the permission request is granted.
Specifies that the permission request is denied.
Indicates the kind of a permission request.
Indicates an unknown permission.
Indicates permission to capture audio.
Indicates permission to capture video.
Indicates permission to access geolocation.
Indicates permission to send web notifications. This permission request is currently auto-rejected and no event is raised for it.
Indicates permission to access generic sensor. Generic Sensor covers ambient-light-sensor, accelerometer, gyroscope, and magnetometer.
Indicates permission to read the system clipboard without a user gesture.
Specifies the reason for moving focus.
Specifies that the code is setting focus into WebView.
Specifies that the focus is moved due to Tab traversal forward.
Specifies that the focus is moved due to Tab traversal backward.
Mouse event virtual keys associated with a for .
No additional keys pressed.
Left mouse button is down, MK_LBUTTON.
Right mouse button is down, MK_RBUTTON.
Shift key is down, MK_SHIFT.
Ctrl key is down, MK_CONTROL.
Middle mouse button is down, MK_MBUTTON.
First X button is down, MK_XBUTTON1.
Second X button is down, MK_XBUTTON2.
Mouse event kind used by to convey the kind of mouse event being sent to WebView.
Mouse horizontal wheel scroll event, WM_MOUSEHWHEEL.
Left button double click mouse event, WM_LBUTTONDBLCLK.
Left button down mouse event, WM_LBUTTONDOWN.
Left button up mouse event, WM_LBUTTONUP.
Mouse leave event, WM_MOUSELEAVE.
Middle button double click mouse event, WM_MBUTTONDBLCLK.
Middle button down mouse event, WM_MBUTTONDOWN.
Middle button up mouse event, WM_MBUTTONUP.
Mouse move event, WM_MOUSEMOVE.
Right button double click mouse event, WM_RBUTTONDBLCLK.
Right button down mouse event, WM_RBUTTONDOWN.
Right button up mouse event, WM_RBUTTONUP.
Mouse wheel scroll event, WM_MOUSEWHEEL.
First or second X button double click mouse event, WM_XBUTTONDBLCLK.
First or second X button down mouse event, WM_XBUTTONDOWN.
First or second X button up mouse event, WM_XBUTTONUP.
Specifies the key event kind that raises an event.
Specifies that the key event kind corresponds to window message WM_KEYDOWN.
Specifies that the key event kind corresponds to window message WM_KEYUP.
Specifies that the key event kind corresponds to window message WM_SYSKEYDOWN.
Specifies that the key event kind corresponds to window message WM_SYSKEYUP.
Kind of cross origin resource access allowed for host resources during download.
Note that other normal access checks like same origin DOM access check and [Content Security Policy](https://developer.mozilla.org/docs/Web/HTTP/CSP) still apply.
The following table illustrates the host resource cross origin access according to access context and CoreWebView2HostResourceAccessKind.
Cross Origin Access Context
Deny
Allow
DenyCors
-
From DOM like src of img, script or iframe element
Deny
Allow
Allow
-
From Script like Fetch or XMLHttpRequest
Deny
Allow
Deny
All cross origin resource access is denied, including normal sub resource access as src of a script or image element.
All cross origin resource access is allowed, including accesses that are subject to Cross-Origin Resource Sharing(CORS) check. The behavior is similar to a web site sends back http header Access-Control-Allow-Origin: *.
Cross origin resource access is allowed for normal sub resource access like as src of a script or image element, while any access that subjects to CORS check will be denied. See [Cross-Origin Resource Sharing](https://developer.mozilla.org/docs/Web/HTTP/CORS) for more information.
The state of the .
The download is in progress.
The connection with the file host was broken. The reason why a download was interrupted can accessed from . See for descriptions of the different kinds of interrupt reasons. Host can check whether an interrupted download can be resumed with . Once resumed, the download state is in progress.
The download completed successfully.
The reason why the was interrupted.
No interrupt reason.
Generic file error.
Access denied due to security restrictions.
Disk full. User should free some space or choose a different location to store the file.
Result file path with file name is too long.
File is too large for file system.
Microsoft Defender Smartscreen detected a virus in the file.
File was in use, too many files opened, or out of memory.
File blocked by local policy.
Security check failed unexpectedly. Microsoft Defender SmartScreen could not scan this file.
Seeking past the end of a file in opening a file, as part of resuming an interrupted download. The file did not exist or was not as large as expected. Partially downloaded file was truncated or deleted, and download will be restarted automatically.
Partial file did not match the expected hash and was deleted. Download will be restarted automatically.
Generic network error. User can retry the download manually.
Network operation timed out.
Network connection lost. User can retry the download manually.
Server has gone down. User can retry the download manually.
Network request invalid because original or redirected URI is invalid, has an unsupported scheme, or is disallowed by network policy.
Generic server error. User can retry the download manually.
Server does not support range requests.
Server does not have the requested data.
Server did not authorize access to resource.
Server certificate problem.
Server access forbidden.
Unexpected server response. Responding server may not be intended server. User can retry the download manually.
Server sent fewer bytes than the Content-Length header. Content-Length header may be invalid or connection may have closed. Download is treated as complete unless there are [strong validators](https://tools.ietf.org/html/rfc7232#section-2) present to interrupt the download.
Unexpected cross-origin redirect.
User canceled the download.
User shut down the WebView. Resuming downloads that were interrupted during shutdown is not yet supported.
User paused the download.
WebView crashed.
Kind of cookie SameSite status used in the class.
These fields match those as specified in https://developer.mozilla.org/docs/Web/HTTP/Cookies#.
Learn more about SameSite cookies here: https://tools.ietf.org/html/draft-west-first-party-cookies-07
None SameSite type. No restrictions on cross-site requests.
Lax SameSite type. The cookie will be sent with "same-site" requests, and with "cross-site" top level navigation.
Strict SameSite type. The cookie will only be sent along with "same-site" requests.
The kind of the .
Specifies smart card certificate.
Specifies PIN certificate.
Specifies other certificate.
Specifies the image format for the method.
Indicates that the PNG image format is used.
Indicates that the JPEG image format is used.
Mode for how the property is interpreted in relation to the property.
property represents raw pixels. Physical size of WebView is not impacted by
property represents logical pixels and the property is used to get the physical size of the WebView.
Contains the information packed into the LPARAM sent to a Win32 key event.
For more information about WM_KEYDOWN, navigate to [WM_KEYDOWN message](/windows/win32/inputdev/wm-keydown).
Specifies the repeat count for the current message.
Specifies the scan code.
Indicates that the key is an extended key.
Indicates that a menu key is held down (context code).
Indicates that the key was held down.
Indicates that the key was released.
A value representing RGBA color (Red, Green, Blue, Alpha) for WebView2.
Each component takes a value from 0 to 255, with 0 being no intensity and 255 being the highest intensity.
Specifies the intensity of the Alpha ie. opacity value. 0 is transparent, 255 is opaque.
Specifies the intensity of the Red color.
Specifies the intensity of the Green color.
Specifies the intensity of the Blue color.
The window features for a WebView popup window.
The fields match the windowFeatures passed to window.open() as specified in [Window features](https://developer.mozilla.org/docs/Web/API/Window/open#Window_features) on MDN. There is no requirement for you to respect the values. If your app does not have corresponding UI features (for example, no toolbar) or if all instance of WebView are opened in tabs and do not have distinct size or positions, then your app does not respect the values. You may want to respect values, but perhaps only some apply to the UI of you app. Accordingly, you may respect all, some, or none of the properties as appropriate for your app. For all numeric properties, if the value that is passed to window.open() is outside the range of an , the resulting value is . If you are not able to parse the value an integer, it is considered 0. If the value is a floating point value, it is rounded down to an integer.
Indicates whether the left and top values are specified.
Indicates whether the height and width values are specified.
Gets the left position of the window. Ignored if is false.
Gets the top position of the window. Ignored if is false.
Gets the height of the window. Ignored if is false.
Gets the width of the window. Ignored if is false.
Indicates that the menu bar is displayed.
Indicates that the status bar is displayed.
Indicates that the browser toolbar is displayed.
Indicates that the scroll bars are displayed.
View of the HTTP representation for a web resource response.
The properties of this object are not mutable. This response view is used with the event.
Gets the HTTP response headers as received.
Gets the HTTP response status code.
Gets the HTTP response reason phrase.
Gets the response content stream asynchronously.
The content failed to load.
A null stream means no content was found. Note content (if any) for redirect responses is ignored.
If this method is being called again before a first call has completed, it will complete at the same time all prior calls do.
If this method is being called after a first call has completed, it will return immediately (asynchronously).
Event args for the event.
Gets the request object for the web resource, as committed.
This includes headers added by the network stack that were not be included during the associated event, such as Authentication headers. Modifications to this object have no effect on how the request is processed as it has already been sent.
Gets view of the response object received for the web resource.
An HTTP response used with the event.
Gets HTTP response content as stream.
Stream must have all the content data available by the time the event deferral of this response is completed. Stream should be agile or be created from a background thread to prevent performance impact to the UI thread. null means no content data.
Gets the overridden HTTP response headers.
Gets or sets the HTTP response status code.
Gets or sets the HTTP response reason phrase.
Event args for the event.
Gets the web resource request.
The request object may be missing some headers that are added by network stack at a later time.
Gets or sets the object.
If this object is set, the event will be completed with this Response.
An empty object can be created with and then modified to construct the Response.
Gets the web resource request context.
Gets a object and put the event into a deferred state.
Use this to the event at a later time.
An HTTP request used with the event.
Gets or sets the request URI.
Gets or sets the HTTP request method.
Gets or sets the HTTP request message body as stream.
POST data should be here. If a stream is set, which overrides the message body, the stream must have all the content data available by the time the event deferral of this request is completed. Stream should be agile or be created from a background STA to prevent performance impact to the UI thread. null means no content data.
Gets the mutable HTTP request headers.
Event args for the event.
Gets the URI of the document that sent this web message.
Gets the message posted from the WebView content to the host converted to a JSON string.
Run this operation to communicate using JavaScript objects.
For example, the following postMessage runs result in the following WebMessageAsJson values:
postMessage({'a': 'b'}) "{\"a\": \"b\"}"
postMessage(1.2) "1.2"
postMessage('example') "\"example\""
Gets the message posted from the WebView content to the host as a .
The message posted from the WebView content to the host
The message posted is some other kind of JavaScript type.
Run this operation to communicate using simple strings.
For example the following postMessage runs result in the following values returned by TryWebMessageAsString:
postMessage({'a': 'b'}) ArgumentException
postMessage(1.2) ArgumentException
postMessage('example') "example"
Event args for the event.
true if the page being navigated to is a new document.
Defines properties that enable, disable, or modify WebView features.
Setting changes made after event do not apply until the next top-level navigation.
Defines properties that enable, disable, or modify WebView features.
Setting changes made after event do not apply until the next top-level navigation.
Defines properties that enable, disable, or modify WebView features.
Setting changes made after event do not apply until the next top-level navigation.
Defines properties that enable, disable, or modify WebView features.
Setting changes made after event do not apply until the next top-level navigation.
Defines properties that enable, disable, or modify WebView features.
Setting changes made after event do not apply until the next top-level navigation.
Determines whether running JavaScript is enabled in all future navigations in the WebView.
This only affects scripts in the document. Scripts injected with runs even if script is disabled. The default value is true.
Determines whether communication from the host to the top-level HTML document of the WebView is allowed.
This is used when loading a new HTML document. If set to true, communication from the host to the top-level HTML document of the WebView is allowed using , , and message event of window.chrome.webview. Communication from the top-level HTML document of the WebView to the host is allowed using window.chrome.webview.postMessage function and the event. If set to false, then communication is disallowed. and fail and window.chrome.webview.postMessage fails by throwing an instance of an Error object. The default value is true.
Determines whether WebView renders the default Javascript dialog box.
This is used when loading a new HTML document. If set to false, WebView does not render the default JavaScript dialog box (specifically those displayed by the JavaScript alert, confirm, prompt functions and beforeunload event). Instead, WebView raises event that contains all of the information for the dialog and allow the host app to show a custom UI. The default value is true.
Determines whether the status bar is displayed.
The status bar is usually displayed in the lower left of the WebView and shows things such as the URI of a link when the user hovers over it and other information. The default value is true.
Determines whether the user is able to use the context menu or keyboard shortcuts to open the DevTools window.
The default value is true.
Determines whether the default context menus are shown to the user in WebView.
The default value is true.
Determines whether host objects are accessible from the page in WebView.
The default value is true.
Determines whether the user is able to impact the zoom of the WebView.
When disabled, the user is not able to zoom using Ctrl++, Ctr+-, or Ctrl+mouse wheel, but the zoom is set using property. The default value is true.
Determines whether to disable built in error page for navigation failure and render process failure.
When disabled, blank page is displayed when related error happens. The default value is true.
Determines WebView2's User Agent.
The default value is the default User Agent of the Edge browser. This property may be overridden if the User-Agent header is set in a request. If the parameter is empty the User Agent will not be updated and the current User Agent will remain.
Determines whether browser-specific accelerator keys are enabled.
When this setting is set to false, it disables all accelerator keys that access
features specific to a web browser, including but not limited to:
-
Ctrl-F and F3 for Find on Page
-
Ctrl-P for Print
-
Ctrl-R and F5 for Reload
-
Ctrl-Plus and Ctrl-Minus for zooming
-
Ctrl-Shift-C and F12 for DevTools
-
Special keys for browser functions, such as Back, Forward, and Search
It does not disable accelerator keys related to movement and text editing, such
as:
-
Home, End, Page Up, and Page Down
-
Ctrl-X, Ctrl-C, Ctrl-V
-
Ctrl-A for Select All
-
Ctrl-Z for Undo
Those accelerator keys will always be enabled unless they are handled in the event.
This setting has no effect on the event. The event
will be fired for all accelerator keys, whether they are enabled or not.
The default value of AreBrowserAcceleratorKeysEnabled is true.
Determines whether password information will be autosaved.
When disabled, no new password data is saved and no Save/Update Password prompts are displayed. However, if there was password data already saved before disabling this setting, then that password information is auto-populated, suggestions are shown and clicking on one will populate the fields.
When enabled, password information is auto-populated, suggestions are shown and clicking on one will populate the fields, new data is saved, and a Save/Update Password prompt is displayed. The default value is false.
Determines whether general form information will be saved and autofilled.
General autofill information includes information like names, street and email addresses, phone numbers, and arbitrary input. This excludes password information. When disabled, no suggestions appear, and no new information is saved.
When enabled, information is saved, suggestions appear, and clicking on one will populate the form fields. The default value is true.
Determines the ability of the end users to use pinching motions on touch input enabled devices to scale the web content in the WebView2.
When disabled, the end users cannot use pinching motions on touch input enabled devices to scale the web content in the WebView2. The default value is true.
Pinch-zoom, referred to as "Page Scale" zoom, is performed as a post-rendering step, it changes the page scale factor property and scales the surface the web page is rendered onto when user performs a pinch zooming action. It does not change the layout but rather changes the viewport and clips the web content, the content outside of the viewport isn't visible onscreen and users can't reach this content using mouse. This API only affects the Page Scale zoom and has no effect on the existing browser zoom properties ( and ) or other end user mechanisms for zooming.
Event args for the event.
Gets the URI of the page that requested the dialog box.
Gets the kind of JavaScript dialog box.
Gets the message of the dialog box.
From JavaScript this is the first parameter passed to alert, confirm, and prompt and is empty for beforeunload.
Gets the default value to use for the result of the prompt JavaScript function.
This is the second parameter passed to the JavaScript prompt dialog.
Gets or sets the return value from the JavaScript prompt function if is run.
This value is ignored for s other than . If is not run, this value is ignored and false is returned from prompt.
Responds with **OK** to confirm, prompt, and beforeunload dialogs. Not run this method to indicate cancel.
From JavaScript, this means that the confirm function and beforeunload event returns true if Accept is run. And for the prompt function it returns the value of if Accept is run and otherwise returns false.
Gets a object.
Use this to the event at a later time.
Event args for the event.
Event args for the event.
Gets the kind of process failure that has occurred.
ProcessFailedKind is if the failed process is the main frame's renderer, even if there were subframes rendered by such process; all frames are gone when this happens.
Gets the reason for the process failure.
The reason is always when is , and when is . For other process failure kinds, the reason may be any of the reason values.
Gets the exit code of the failing process, for telemetry purposes.
The exit code is always 1 when is , and STILL_ACTIVE(259) when is .
Gets a description of the failing process, assigned by the WebView2 Runtime.
This is a technical English term appropriate for logging or development purposes, and not localized for the end user. It applies to utility processes (for example, "Audio Service", "Video Capture") and plugin processes (for example, "Flash"). The returned string is empty if the WebView2 Runtime did not assign a description to the process.
Gets the collection of s for frames in the that were being rendered by the failed process.
The content in these frames is replaced with an error page.
This is only available when is ; the returned collection is empty for all other process failure kinds, including the case in which the failed process was the renderer for the main frame and subframes within it, for which the failure kind is .
This mostly represents a combined win32 POINTER_INFO, POINTER_TOUCH_INFO, and POINTER_PEN_INFO object.
Gets or sets the PointerKind of the pointer event.
This corresponds to the pointerKind property of the POINTER_INFO struct. The values are defined by the POINTER_INPUT_KIND enum in the Windows SDK (_winuser.h_). Supports PT_PEN and PT_TOUCH.
Gets or sets the PointerId of the pointer event.
This corresponds to the pointerId property of the POINTER_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the FrameID of the pointer event.
This corresponds to the frameId property of the POINTER_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the PointerFlags of the pointer event.
This corresponds to the pointerFlags property of the POINTER_INFO struct. The values are defined by the POINTER_FLAGS constants in the Windows SDK (_winuser.h_).
Gets or sets the PointerDeviceRect of the sourceDevice property of the POINTER_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the DisplayRect of the sourceDevice property of the POINTER_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the PixelLocation of the pointer event.
This corresponds to the ptPixelLocation property of the POINTER_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the HimetricLocation of the pointer event.
This corresponds to the ptHimetricLocation property of the POINTER_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the PixelLocationRaw of the pointer event.
This corresponds to the ptPixelLocationRaw property of the POINTER_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the HimetricLocationRaw of the pointer event.
This corresponds to the ptHimetricLocationRaw property of the POINTER_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the Time of the pointer event.
This corresponds to the dwTime property of the POINTER_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the HistoryCount of the pointer event.
This corresponds to the historyCount property of the POINTER_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the InputData of the pointer event.
This corresponds to the InputData property of the POINTER_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the KeyStates of the pointer event.
This corresponds to the dwKeyStates property of the POINTER_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the PerformanceCount of the pointer event.
This corresponds to the PerformanceCount property of the POINTER_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the ButtonChangeKind of the pointer event.
This corresponds to the ButtonChangeKind property of the POINTER_INFO struct. The values are defined by the POINTER_BUTTON_CHANGE_KIND enum in the Windows SDK (_winuser.h_).
Gets or sets the PenFlags of the pointer event.
This corresponds to the penFlags property of the POINTER_PEN_INFO struct. The values are defined by the PEN_FLAGS constants in the Windows SDK (_winuser.h_).
Gets or sets the PenMask of the pointer event.
This corresponds to the penMask property of the POINTER_PEN_INFO struct. The values are defined by the PEN_MASK constants in the Windows SDK (_winuser.h_).
Gets or sets the PenPressure of the pointer event.
This corresponds to the pressure property of the POINTER_PEN_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the PenRotation of the pointer event.
This corresponds to the rotation property of the POINTER_PEN_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the PenTiltX of the pointer event.
This corresponds to the tiltX property of the POINTER_PEN_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the PenTiltY of the pointer event.
This corresponds to the tiltY property of the POINTER_PEN_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the TouchFlags of the pointer event.
This corresponds to the touchFlags property of the POINTER_TOUCH_INFO struct. The values are defined by the TOUCH_FLAGS constants in the Windows SDK (_winuser.h_).
Gets or sets the TouchMask of the pointer event.
This corresponds to the touchMask property of the POINTER_TOUCH_INFO struct. The values are defined by the TOUCH_MASK constants in the Windows SDK (_winuser.h_).
Gets or sets the TouchContact of the pointer event.
This corresponds to the rcContact property of the POINTER_TOUCH_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the TouchContactRaw of the pointer event.
This corresponds to the rcContactRaw property of the POINTER_TOUCH_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the TouchOrientation of the pointer event.
This corresponds to the orientation property of the POINTER_TOUCH_INFO struct as defined in the Windows SDK (_winuser.h_).
Gets or sets the TouchPressure of the pointer event.
This corresponds to the pressure property of the POINTER_TOUCH_INFO struct as defined in the Windows SDK (_winuser.h_).
Event args for the event.
Gets the origin of the web content that requests the permission.
Gets the kind of the permission that is requested.
true when the permission request was initiated through a user gesture such as clicking an anchor tag with target.
Being initiated through a user gesture does not mean that user intended to access the associated resource.
Gets or sets the status of a permission request. For example, whether the request is granted.
The default value is .
Gets a object.
Use the deferral object to make the permission decision at a later time.
Event args for the event.
Gets the target uri of the new window request.
Gets the new window or sets a WebView as a result of the new window requested.
Provides a WebView as the target for a window.open() from inside the requesting WebView. If this is set, the top-level window returns as the opened WindowProxy. If this is not set, then is checked to determine behavior for the . WebView provided in the NewWindow property must be on the same as the opener WebView and cannot be navigated.
Indicates whether the event is handled by host.
If this is false and no is set, the WebView opens a popup window and it returns as opened WindowProxy. If set to true and no is set for window.open(), the opened WindowProxy is for a dummy window object and no window loads. The default value is false.
true when the new window request was initiated through a user gesture such as selecting an anchor tag with target.
The Microsoft Edge popup blocker is disabled for WebView so the app is able to use this flag to block non-user initiated popups.
Gets the window features specified by the window.open() call. These features should be considered for positioning and sizing of new WebView windows.
Gets a object and put the event into a deferred state.
Use this to the window open request at a later time. While this event is deferred the opener window returns a WindowProxy to an un-navigated window, which navigates when the deferral is complete.
Event args for the event.
Gets the uri of the requested navigation.
true when the navigation was initiated through a user gesture as opposed to programmatic navigation.
true when the navigation is redirected.
Gets the HTTP request headers for the navigation.
Note, you are not able to modify the HTTP request headers in a event.
Determines whether to cancel the navigation.
If set to true, the navigation is no longer present and the content of the current page is intact. For performance reasons, GET HTTP requests may happen, while the host is responding. You may set cookies and use part of a request for the navigation. Cancellation for navigation to about:blank or frame navigation to srcdoc is not supported and ignored.
Gets the ID of the navigation.
Event args for the event.
true when the navigation is successful; false for a navigation that ended up in an error page (failures due to no network, DNS lookup failure, HTTP server responds with 4xx).
This may also be false for additional scenarios such as window.stop() run on navigated page.
Gets the error code if the navigation failed.
Gets the ID of the navigation.
Event args for the event.
Gets the reason for WebView to raise the event.
Indicates whether the event has been handled by the app.
If the app has moved the focus to another desired location, it should set Handled property to true. When Handled property is false after the event handler returns, default action is taken. The default action is to try to find the next tab stop child window in the app and try to move focus to that window. If no other window exists to move focus, focus is cycled within the web content of the WebView.
Provides a set of properties for a frame in the .
Gets the name attribute of the frame, as in <iframe name="frame-name" ...>.
The returned string is empty when the frame has no name attribute.
The URI of the document in the frame.
Event args for the event.
Gets the created frame.
Event args for the event.
Returns the for the download that has started.
Indicates whether to cancel the download.
If canceled, the download save dialog is not displayed regardless of the
value and the state is changed to with interrupt reason .
The path to the file.
If setting the path, the host should ensure that it is an absolute path,
including the file name, and that the path does not point to an existing file.
If the path points to an existing file, the file will be overwritten. If the directory does not exist, it is created.
Indicates whether to hide the default download dialog.
If set to true, the default download dialog is hidden for this download. The
download progresses normally if it is not canceled, there will just be no
default UI shown. By default the value is false and the default download dialog
is shown.
Gets a object.
Use this to the event at a later time.
Event args for the event.
Gets the ID of the navigation.
A Receiver is created for a particular DevTools Protocol event and allows you to subscribe and unsubscribe from that event.
Obtained from the WebView object using .
DevToolsProtocolEventReceived is raised when the corresponding DevToolsProtocol event is raised.
Event args for the event.
Gets the parameter object of the corresponding DevToolsProtocol event represented as a JSON string.
Event args for the event.
true if the loaded content is an error page.
Gets the ID of the navigation.
This class is an extension of the class to support visual hosting.
This class is an extension of the class to support visual hosting.
Gets or sets the root visual in the hosting app's visual tree.
This visual is where the WebView will connect its visual tree. The app uses this visual to position the WebView within the app. The app still needs to use the property to size the WebView. The RootVisualTarget property can be an IDCompositionVisual or a Windows::UI::Composition::ContainerVisual. WebView will connect its visual tree to the provided visual before returning from the property setter. The app needs to commit on its device setting the RootVisualTarget property. The RootVisualTarget property supports being set to null to disconnect the WebView from the app's visual tree.
Gets the current cursor that WebView thinks it should be.
The cursor should be set in WM_SETCURSOR through Mouse.SetCursor or set on the corresponding parent/ancestor HWND of the WebView through ::SetClassLongPtr. The HCURSOR can be freed so CopyCursor/DestroyCursor is recommended to keep your own copy if you are doing more than immediately setting the cursor.
Gets the current system cursor ID reported by the underlying rendering engine for WebView.
The event is raised when WebView thinks the cursor should be changed.
For example, when the mouse cursor is currently the default cursor but is then moved over text, it may try to change to the IBeam cursor.
It is expected for the developer to send messages (in addition to messages) through . This is to ensure that the mouse is actually within the WebView that sends out CursorChanged events.
Sends mouse input to the WebView.
The mouse event kind.
The virtual keys associated with the eventKind.
The amount of wheel movement.
The absolute position of the mouse, or the amount of motion since the last mouse event was generated, depending on the eventKind.
If eventKind is or , then mouseData specifies the amount of wheel movement.
A positive value indicates that the wheel was rotated forward, away from the user; a negative value indicates that the wheel was rotated backward, toward the user. One wheel click is defined as WHEEL_DELTA, which is 120. If eventKind is , , or , then mouseData specifies which X buttons were pressed or released. This value should be 1 if the first X button is pressed/released and 2 if the second X button is pressed/released. If eventKind is , then virtualKeys, mouseData, and point should all be zero. If eventKind is any other value, then mouseData should be zero. point is expected to be in the client coordinate space of the WebView. To track mouse events that start in the WebView and can potentially move outside of the WebView and host application, calling SetCapture and ReleaseCapture is recommended. To dismiss hover popups, it is also recommended to send messages.
Sends pen or pointer input to the WebView.
The pointer event kind.
The pointer information.
Accepts touch or pen pointer input of kinds defined in .
Any pointer input from the system must be converted into a first.
Event args for the event.
Returns host name of the server that requested client certificate authentication.
Normalization rules applied to the hostname are:
* Convert to lowercase characters for ascii characters.
* Punycode is used for representing non ascii characters.
* Strip square brackets for IPV6 address.
Returns port of the server that requested client certificate authentication.
Returns true if the server that issued this request is an http proxy. Returns false if the server is the origin server.
The list contains distinguished names of certificate authorities allowed by the server.
Returns the list of when client certificate authentication is requested. The list contains mutually trusted CA certificate.
Selected certificate to respond to the server.
Indicates whether to cancel the certificate selection.
If canceled, the request is aborted regardless of the property. By default the value is false.
Indicates whether the event has been handled by host.
Set to true to respond to the server with or without a certificate. If this flag is true with a it responds to the server with the selected certificate otherwise respond to the server without a certificate. By default the value of and are false and display default client certificate selection dialog prompt to allow the user to choose a certificate. The is ignored unless is set to true.
Gets a object.
Use this to the event at a later time.
Event args for the event.
Gets the key event kind that caused the event to run.
Gets the Win32 virtual key code of the key that was pressed or released.
It is one of the Win32 virtual key constants such as VK_RETURN or an (uppercase) ASCII value such as 'A'. Verify whether Ctrl or Alt are pressed by running GetKeyState(VK_CONTROL) or GetKeyState(VK_MENU).
Gets the LPARAM value that accompanied the window message.
See the documentation for the WM_KEYDOWN and WM_KEYUP messages.
Gets a representing the information passed in the LPARAM of the window message.
Indicates whether the event is handled by host.
If set to true then this prevents the WebView from performing the default action for this accelerator key. Otherwise the WebView will perform the default action for the accelerator key.
WebView2 enables you to host web content using the latest Microsoft Edge browser and web technology.
WebView2 enables you to host web content using the latest Microsoft Edge browser and web technology.
WebView2 enables you to host web content using the latest Microsoft Edge browser and web technology.
WebView2 enables you to host web content using the latest Microsoft Edge browser and web technology.
WebView2 enables you to host web content using the latest Microsoft Edge browser and web technology.
Gets the object contains various modifiable settings for the running WebView.
Gets the URI of the current top level document.
This value potentially changes as a part of the event raised for some cases such as navigating to a different site or fragment navigations. It remains the same for other types of navigations such as page refreshes or history.pushState with the same URL as the current page.
Gets the process ID of the browser process that hosts the WebView.
true if the WebView is able to navigate to a previous page in the navigation history.
If CanGoBack changes value, the event is raised.
true if the WebView is able to navigate to a next page in the navigation history.
If CanGoForward changes value, the event is raised.
Gets the title for the current top-level document.
If the document has no explicit title or is otherwise empty, a default that may or may not match the URI of the document is used.
Indicates if the WebView contains a fullscreen HTML element.
NavigationStarting is raised when the WebView main frame is requesting permission to navigate to a different URI.
Redirects raise this event as well, and the navigation id is the same as the original one. You may block corresponding navigations until the event handler returns.
ContentLoading is raised before any content is loaded, including scripts added with . ContentLoading is not raised if a same page navigation occurs (such as through fragment navigations or history.pushState navigations).
This operation follows the and events and precedes the and events.
SourceChanged is raised when the property changes.
SourceChanged is raised when navigating to a different site or fragment navigations. It is not raised for other types of navigations such as page refreshes or history.pushState with the same URL as the current page. This event is raised before for navigation to a new document.
HistoryChanged is raised when there is change of navigation history for the top level document.
Use HistoryChanged to verify that the or value has changed. HistoryChanged is also raised for using or . HistoryChanged is raised after and .
NavigationCompleted is raised when the WebView has completely loaded (body.onload has been raised) or loading stopped with error.
FrameNavigationStarting is raised when a child frame in the WebView requests permission to navigate to a different URI.
Redirects raise this operation as well, and the navigation id is the same as the original one. You may block corresponding navigations until the event handler returns.
FrameNavigationCompleted is raised when a child frame has completely loaded (body.onload has been raised) or loading stopped with error.
ScriptDialogOpening is raised when a JavaScript dialog (alert, confirm, prompt, or beforeunload) displays for the WebView.
This event only is raised if the property is set to false. This event suppresses dialogs or replaces default dialogs with custom dialogs.
If a deferral is not taken on the event args, the subsequent scripts are blocked until the event handler returns. If a deferral is taken, the scripts are blocked until the deferral is completed.
PermissionRequested is raised when content in a WebView requests permission to access some privileged resources.
If a deferral is not taken on the event args, the subsequent scripts are blocked until the event handler returns. If a deferral is taken, the scripts are blocked until the deferral is completed.
ProcessFailed is raised when a WebView process ends unexpectedly or becomes unresponsive.
WebMessageReceived is raised when the setting is set and the top-level document of the WebView runs window.chrome.webview.postMessage.
The postMessage function is void postMessage(object) where object is any object supported by JSON conversion.
When postMessage is called, the handler's Invoke method will be called with the object parameter postMessage converted to a JSON string.
NewWindowRequested is raised when content inside the WebView requests to open a new window, such as through window.open().
The app passes a target WebView that is considered the opened window.
If a deferral is not taken on the event args, scripts that resulted in the new window that are requested are blocked until the event handler returns. If a deferral is taken, then scripts are blocked until the deferral is completed.
DocumentTitleChanged is raised when the property changes and may be raised before or after the event.
ContainsFullScreenElementChanged is raised when the property changes.
An HTML element inside the WebView may enter fullscreen to the size of the WebView or leave fullscreen. This event is useful when, for example, a video element requests to go fullscreen. The listener of this event may resize the WebView in response.
WebResourceRequested is raised when the WebView is performing a URL request to a matching URL and resource context filter that was added with .
At least one filter must be added for the event to be raised.
The web resource requested may be blocked until the event handler returns if a deferral is not taken on the event args. If a deferral is taken, then the web resource requested is blocked until the deferral is completed.
Currently this only supports file, http, and https URI schemes.
WindowCloseRequested is raised when content inside the WebView requested to close the window, such as after window.close() is run.
The app should close the WebView and related app window if that makes sense to the app.
Causes a navigation of the top level document to the specified URI.
The URI to navigate to.
For more information, navigate to [Navigation event](/microsoft-edge/webview2/concepts/navigation-events). Note that this operation starts a navigation and the corresponding event is raised sometime after Navigate runs.
Initiates a navigation to as source HTML of a new document.
A source HTML of a new document.
The htmlContent parameter may not be larger than 2 MB (2 * 1024 * 1024 bytes) in total size. The origin of the new page is about:blank.
Adds the provided JavaScript to a list of scripts that should be run after the global object has been created, but before the HTML document has been parsed and before any other script included by the HTML document is run.
The JavaScript code to be run.
A script ID that may be passed when calling .
The injected script will apply to all future top level document and child frame navigations until removed with .
This is applied asynchronously and you must wait for the returned to complete before you can be sure that the script is ready to execute on future navigations.
Note that if an HTML document has sandboxing of some kind via [sandbox](https://developer.mozilla.org/docs/Web/HTML/Element/iframe#attr-sandbox) properties or the [Content-Security-Policy HTTP header](https://developer.mozilla.org/docs/Web/HTTP/Headers/Content-Security-Policy) this will affect the script run here. So, for example, if the allow-modals keyword is not set then calls to the alert function will be ignored.
Removes the corresponding JavaScript added via with the specified script ID.
The ID corresponds to the JavaScript code to be removed from the list of scripts.
Runs JavaScript code from the parameter in the current top-level document rendered in the WebView.
The JavaScript code to be run in the current top-level document rendered in the WebView.
A JSON encoded string that represents the result of running the provided JavaScript.
If the result is undefined, contains a reference cycle, or otherwise is not able to be encoded into JSON, the JSON null value is returned as the "null" string.
A function that has no explicit return value returns undefined. If the script that was run throws an unhandled exception, then the result is also null. This method is applied asynchronously. If the method is run after the event during a navigation, the script runs in the new document when loading it, around the time is run. This operation works even if is set to false.
Captures an image of what WebView is displaying.
The format of the image to be captured.
The stream to which the resulting image binary data is written.
When CapturePreviewAsync finishes writing to the stream, the Invoke method on the provided handler parameter is called. This method fails if called before the first ContentLoading event. For example if this is called in the event for the first navigation it will fail. For subsequent navigations, the method may not fail, but will not capture an image of a given webpage until the event has been fired for it. Any call to this method prior to that will result in a capture of the page being navigated away from.
Reloads the current page.
This is similar to navigating to the URI of current top level document including all navigation events firing and respecting any entries in the HTTP cache. But, the back or forward history will not be modified.
Posts the specified to the top level document in this WebView.
The web message to be posted to the top level document in this WebView.
The event args is an instance of MessageEvent. The setting must be true or this method will fail with E_INVALIDARG. The event arg's data property of the event arg is the webMessageAsJson parameter parsed as a JSON string into a JavaScript object. The event arg's source property of the event arg is a reference to the window.chrome.webview object. For information about sending messages from the HTML document in the WebView to the host, navigate to . The message is sent asynchronously. If a navigation occurs before the message is posted to the page, the message is not be sent.
Runs the message event of the window.chrome.webview of the top-level document. JavaScript in that document may subscribe and unsubscribe to the event using the following code:
window.chrome.webview.addEventListener('message', handler)
window.chrome.webview.removeEventListener('message', handler)
Posts a message that is a simple rather than a JSON string representation of a JavaScript object.
The web message to be posted to the top level document in this WebView.
This behaves in exactly the same manner as , but the data property of the event arg of the window.chrome.webview message is a with the same value as webMessageAsString. Use this instead of if you want to communicate using simple strings rather than JSON objects.
Runs an asynchronous DevToolsProtocol method.
The full name of the method in the format {domain}.{method}
A JSON formatted string containing the parameters for the corresponding method.
A JSON string that represents the method's return object.
For more information about available methods, navigate to [DevTools Protocol Viewer](https://aka.ms/DevToolsProtocolDocs). The handler's Invoke method will be called when the method asynchronously completes. Invoke will be called with the method's return object as a JSON string.
Navigates the WebView to the previous page in the navigation history.
Navigates the WebView to the next page in the navigation history.
Gets a DevTools Protocol event receiver that allows you to subscribe to a DevToolsProtocol event.
The full name of the event in the format {domain}.{event}.
A Devtools Protocol event receiver.
For more information about DevToolsProtocol events description and event args, navigate to [DevTools Protocol Viewer](https://aka.ms/DevToolsProtocolDocs).
Stops all navigations and pending resource fetches.
Does not stop scripts.
Adds the provided host object to script running in the WebView with the specified name.
The name of the host object.
The host object to be added to script.
Host objects are exposed as host object proxies via window.chrome.webview.hostObjects.{name}. Host object proxies are promises and will resolve to an object representing the host object. Only the COM visible objects/properties/methods can be accessed from script. The app can control which part of .NET objects are exposed using .
JavaScript code in the WebView will be able to access appObject as following and then access attributes and methods of appObject.
Note that while simple types, IDispatch and array are supported, generic IUnknown, VT_DECIMAL, or VT_RECORD variant is not supported. Remote JavaScript objects like callback functions are represented as an VT_DISPATCH VARIANT with the object implementing IDispatch. The JavaScript callback method may be invoked using DISPID_VALUE for the DISPID. Nested arrays are supported up to a depth of 3. Arrays of by reference types are not supported. VT_EMPTY and VT_NULL are mapped into JavaScript as null. In JavaScript null and undefined are mapped to VT_EMPTY.
Additionally, all host objects are exposed as window.chrome.webview.hostObjects.sync.{name}. Here the host objects are exposed as synchronous host object proxies. These are not promises and calls to functions or property access synchronously block running script waiting to communicate cross process for the host code to run. Accordingly this can result in reliability issues and it is recommended that you use the promise based asynchronous window.chrome.webview.hostObjects.{name} API described above.
Synchronous host object proxies and asynchronous host object proxies can both proxy the same host object. Remote changes made by one proxy will be reflected in any other proxy of that same host object whether the other proxies and synchronous or asynchronous.
While JavaScript is blocked on a synchronous call to native code, that native code is unable to call back to JavaScript. Attempts to do so will fail with HRESULT_FROM_WIN32(ERROR_POSSIBLE_DEADLOCK).
Host object proxies are JavaScript Proxy objects that intercept all property get, property set, and method invocations. Properties or methods that are a part of the Function or Object prototype are run locally. Additionally any property or method in the array chrome.webview.hostObjects.options.forceLocalProperties will also be run locally. This defaults to including optional methods that have meaning in JavaScript like toJSON and Symbol.toPrimitive. You can add more to this array as required.
There's a method chrome.webview.hostObjects.cleanupSome that will best effort garbage collect host object proxies.
Host object proxies additionally have the following methods which run locally:
-
applyHostFunction, getHostProperty, setHostProperty
Perform a method invocation, property get, or property set on the host object. You can use these to explicitly force a method or property to run remotely if there is a conflicting local method or property. For instance, proxy.toString() will run the local toString method on the proxy object. But proxy.applyHostFunction('toString') runs toString on the host proxied object instead.
-
getLocalProperty, setLocalProperty
Perform property get, or property set locally. You can use these methods to force getting or setting a property on the host object proxy itself rather than on the host object it represents. For instance, proxy.unknownProperty will get the property named unknownProperty from the host proxied object. But proxy.getLocalProperty('unknownProperty') will get the value of the property unknownProperty on the proxy object itself.
-
sync
Asynchronous host object proxies expose a sync method which returns a promise for a synchronous host object proxy for the same host object. For example, chrome.webview.hostObjects.sample.methodCall() returns an asynchronous host object proxy. You can use the sync method to obtain a synchronous host object proxy instead:
const syncProxy = await chrome.webview.hostObjects.sample.methodCall().sync()
-
async
Synchronous host object proxies expose an async method which blocks and returns an asynchronous host object proxy for the same host object. For example, chrome.webview.hostObjects.sync.sample.methodCall() returns a synchronous host object proxy. Calling the async method on this blocks and then returns an asynchronous host object proxy for the same host object: const asyncProxy = chrome.webview.hostObjects.sync.sample.methodCall().async()
-
then
Asynchronous host object proxies have a then method. This allows them to be awaitable. then will return a promise that resolves with a representation of the host object. If the proxy represents a JavaScript literal then a copy of that is returned locally. If the proxy represents a function then a non-awaitable proxy is returned. If the proxy represents a JavaScript object with a mix of literal properties and function properties, then the a copy of the object is returned with some properties as host object proxies.
All other property and method invocations (other than the above Remote object proxy methods, forceLocalProperties list, and properties on Function and Object prototypes) are run remotely. Asynchronous host object proxies return a promise representing asynchronous completion of remotely invoking the method, or getting the property. The promise resolves after the remote operations complete and the promises resolve to the resulting value of the operation. Synchronous host object proxies work similarly but block JavaScript execution and wait for the remote operation to complete.
Setting a property on an asynchronous host object proxy works slightly differently. The set returns immediately and the return value is the value that will be set. This is a requirement of the JavaScript Proxy object. If you need to asynchronously wait for the property set to complete, use the setHostProperty method which returns a promise as described above. Synchronous object property set property synchronously blocks until the property is set.
Exposing host objects to script has security risk. Please follow [best practices](/microsoft-edge/webview2/concepts/security).
To create a [IDispatch](/windows/win32/api/oaidl/nn-oaidl-idispatch) implementing class in C# use the following attributes on each class you intend to expose.
// Bridge and BridgeAnotherClass are C# classes that implement IDispatch and works with AddHostObjectToScript.
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class BridgeAnotherClass
{
// Sample property.
public string Prop { get; set; } = "Example";
}
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class Bridge
{
public string Func(string param)
{
return "Example: " + param;
}
public BridgeAnotherClass AnotherObject { get; set; } = new BridgeAnotherClass();
// Sample indexed property.
[System.Runtime.CompilerServices.IndexerName("Items")]
public string this[int index]
{
get { return m_dictionary[index]; }
set { m_dictionary[index] = value; }
}
private Dictionary<int, string> m_dictionary = new Dictionary<int, string>();
}
Then add instances of those classes via :
webView.CoreWebView2.AddHostObjectToScript("bridge", new Bridge());
And then in script you can call the methods, and access those properties of the objects added via :
// Find added objects on the hostObjects property
const bridge = chrome.webview.hostObjects.bridge;
// Call a method and pass in a parameter.
// The result is another proxy promise so you must await to get the result.
console.log(await bridge.Func("testing..."));
// A property may be another object as long as its class also implements
// IDispatch.
// Getting a property also gets a proxy promise you must await.
const propValue = await bridge.AnotherObject.Prop;
console.log(propValue);
// Indexed properties
let index = 123;
bridge[index] = "test";
let result = await bridge[index];
console.log(result);
Removes the host object specified by the name so that it is no longer accessible from JavaScript code in the WebView.
The name of the host object to be removed.
While new access attempts are denied, if the object is already obtained by JavaScript code in the WebView, the JavaScript code continues to have access to that object. Running this method for a name that is already removed or never added fails.
Opens the DevTools window for the current document in the WebView.
Does nothing if run when the DevTools window is already open.
Adds a URI and resource context filter for the event.
An URI to be added to the event.
A resource context filter to be added to the event.
Adds a URI and resource context filter for the
event. A web resource request with a resource context that matches this
filter's resource context and a URI that matches this filter's URI
wildcard string will be raised via the event.
The parameter value is a wildcard string matched against the URI
of the web resource request. This is a glob style
wildcard string in which a * matches zero or more characters and a ?
matches exactly one character.
These wildcard characters can be escaped using a backslash just before
the wildcard character in order to represent the literal * or ?.
The matching occurs over the URI as a whole string and not limiting
wildcard matches to particular parts of the URI.
The wildcard filter is compared to the URI after the URI has been
normalized, any URI fragment has been removed, and non-ASCII hostnames
have been converted to punycode.
Specifying a nullptr for the uri is equivalent to an empty string which
matches no URIs.
For more information about resource context filters, navigate to
.
URI Filter String
Request URI
Match
Notes
-
*
https://contoso.com/a/b/c
Yes
A single * will match all URIs
-
*://contoso.com/*
https://contoso.com/a/b/c
Yes
Matches everything in contoso.com across all schemes
-
*://contoso.com/*
https://example.com/?https://contoso.com/
Yes
But also matches a URI with just the same text anywhere in the URI
-
example
https://contoso.com/example
No
The filter does not perform partial matches
-
*example
https://contoso.com/example
Yes
The filter matches across URI parts
-
*example
https://contoso.com/path/?example
Yes
The filter matches across URI parts
-
*example
https://contoso.com/path/?query#example
No
The filter is matched against the URI with no fragment
-
*example
https://example
No
The URI is normalized before filter matching so the actual URI used for comparison is https://example.com/
-
*example/
https://example
Yes
Just like above, but this time the filter ends with a / just like the normalized URI
-
https://xn--qei.example/
https://❤.example/
Yes
Non-ASCII hostnames are normalized to punycode before wildcard comparison
-
https://❤.example/
https://xn--qei.example/
No
Non-ASCII hostnames are normalized to punycode before wildcard comparison
Removes a matching WebResource filter that was previously added for the event.
An URI to at which a web resource filter was added.
A previously added resource context filter to be removed.
A filter that was never added.
If the same filter was added multiple times, then it must need to be removed as many times as it was added for the removal to be effective.
Gets the object associated with this .
Exposes the used to create this .
WebResourceResponseReceived is raised when the WebView receives the response for a request for a web resource (any URI resolution performed by the WebView; such as HTTP/HTTPS, file and data requests from redirects, navigations, declarations in HTML, implicit favicon lookups, and fetch API usage in the document). The host app can use this event to view the actual request and response for a web resource. There is no guarantee about the order in which the WebView processes the response and the host app's handler runs. The app's handler will not block the WebView from processing the response.
The event args include the as sent by the wire and received, including any additional headers added by the network stack that were not be included as part of the associated event, such as Authentication headers.
DOMContentLoaded is raised when the initial HTML document has been parsed.
This aligns with the the document's DOMContentLoaded event in HTML.
Navigates using a constructed object.
The constructed web resource object to provide post data or additional request headers during navigation.
The headers in the override headers added by WebView2 runtime except for Cookie headers. Method can only be either GET or POST. Provided post data will only be sent only if the method is POST and the uri scheme is HTTP(S).
Whether WebView is suspended.
True when WebView is suspended, from the time when has completed successfully until WebView is resumed.
An app may call this API to have the WebView2 consume less memory.
This is useful when a Win32 app becomes invisible, or when a Universal Windows Platform app is being suspended, during the suspended event handler before completing the suspended event.
The CoreWebView2Controller's IsVisible property must be false when the API is called. Otherwise, the API throws COMException with error code of HRESULT_FROM_WIN32(ERROR_INVALID_STATE).
Suspending is similar to putting a tab to sleep in the Edge browser. Suspending pauses WebView script timers and animations, minimizes CPU usage for the associated browser renderer process and allows the operating system to reuse the memory that was used by the renderer process for other processes.
Note that Suspend is best effort and considered completed successfully once the request is sent to browser renderer process. If there is a running script, the script will continue to run and the renderer process will be suspended after that script is done.
See [Sleeping Tabs FAQ](https://techcommunity.microsoft.com/t5/articles/sleeping-tabs-faq/m-p/1705434) for conditions that might prevent WebView from being suspended. In those situations, the result of the async task is false.
The WebView will be automatically resumed when it becomes visible. Therefore, the app normally does not have to call explicitly.
The app can call and then periodically for an invisible WebView so that the invisible WebView can sync up with latest data and the page ready to show fresh content when it becomes visible.
All WebView APIs can still be accessed when a WebView is suspended. Some APIs like Navigate will auto resume the WebView. To avoid unexpected auto resume, check property before calling APIs that might change WebView state.
Resumes the WebView so that it resumes activities on the web page.
This API can be called while the WebView2 controller is invisible.
The app can interact with the WebView immediately after .
WebView will be automatically resumed when it becomes visible.
Sets a mapping between a virtual host name and a folder path to make available to web sites via that host name.
A virtual host name.
A folder path name to be mapped to the virtual host name.
The level of access to resources under the virtual host from other sites.
After setting the mapping, documents loaded in the WebView can use HTTP or HTTPS URLs at the specified host name specified by hostName to access files in the local folder specified by folderPath.
This mapping applies to both top-level document and iframe navigations as well as subresource references from a document. This also applies to dedicated and shared worker scripts but does not apply to service worker scripts.
Due to a current implementation limitation, media files accessed using virtual host name can be very slow to load.
As the resource loaders for the current page might have already been created and running, changes to the mapping might not be applied to the current page and a reload of the page is needed to apply the new mapping.
Both absolute and relative paths are supported for folderPath. Relative paths are interpreted as relative to the folder where the exe of the app is in.
For example, after calling
SetVirtualHostNameToFolderMapping("appassets.example", "assets", CoreWebView2HostResourceAccessKind.Deny);
, navigating to https://appassets.example/my-local-file.html will show content from my-local-file.html in the assets subfolder located on disk under the same path as the app's executable file.
You should typically choose virtual host names that are never used by real sites.
If you own a domain such as example.com, another option is to use a subdomain reserved for the app (like my-app.example.com).
[RFC 6761](https://tools.ietf.org/html/rfc6761) has reserved several special-use domain names that are guaranteed to not be used by real sites (for example, .example, .test, and .invalid.)
Apps should use distinct domain names when mapping folder from different sources that should be isolated from each other. For instance, the app might use app-file.example for files that ship as part of the app, and book1.example might be used for files containing books from a less trusted source that were previously downloaded and saved to the disk by the app.
The host name used in the APIs is canonicalized using Chromium's host name parsing logic before being used internally.
All host names that are canonicalized to the same string are considered identical.
For example, EXAMPLE.COM and example.com are treated as the same host name.
An international host name and its Punycode-encoded host name are considered the same host name. There is no DNS resolution for host name and the trailing '.' is not normalized as part of canonicalization.
Therefore example.com and example.com. are treated as different host names. Similarly, virtual-host-name and virtual-host-name.example.com are treated as different host names even if the machine has a DNS suffix of example.com.
Specify the minimal cross-origin access necessary to run the app. If there is not a need to access local resources from other origins, use .
webView.CoreWebView2.SetVirtualHostNameToFolderMapping(
"appassets.example", "assets", CoreWebView2HostResourceAccessKind.DenyCors);
webView.Source = new Uri("https://appassets.example/index.html");
Clears a host name mapping for local folder that was added by .
The host name to be removed from the mapping.
FrameCreated is raised when a new iframe is created.
Use the to listen for when this iframe goes away.
DownloadStarting is raised when a download has begun, blocking the default download dialog, but not blocking the progress of the download.
The host can choose to cancel a download, change the result file path, and hide the default download dialog. If download is not handled or canceled, the download is saved to the default path after the event completes with default download dialog shown.
ClientCertificateRequested is raised when WebView2 is making a request to an HTTP server that needs a client certificate for HTTP authentication. Read more about HTTP client certificates at [RFC 8446 The Transport Layer Security (TLS) Protocol Version 1.3](https://tools.ietf.org/html/rfc8446).
The host have several options for responding to client certificate requests:
Scenario | Handled | Cancel | SelectedCertificate
---------------------------------------------------------- | ------- | ------ | -------------------
Respond to server with a certificate | True | False | MutuallyTrustedCertificate value
Respond to server without certificate | True | False | null
Display default client certificate selection dialog prompt | False | False | n/a
Cancel the request | n/a | True | n/a
If the host don't handle the event, WebView2 will show the default client certificate selection dialog prompt to the user.