WebViewCompat

open class WebViewCompat
kotlin.Any
   ↳ androidx.webkit.WebViewCompat

Compatibility version of android.webkit.WebView

Summary

Nested classes
abstract

Callback interface supplied to #postVisualStateCallback for receiving notifications about the visual state.

Public methods
open static Unit

Posts a VisualStateCallback, which will be called when the current state of the WebView is ready to be drawn.

open static Unit

Starts Safe Browsing initialization.

open static Unit

Sets the list of hosts (domain names/IP addresses) that are exempt from SafeBrowsing checks.

open static Uri

Returns a URL pointing to the privacy policy for Safe Browsing reporting.

open static PackageInfo?

If WebView has already been loaded into the current process this method will return the package that was used to load it.

open static Array<WebMessagePortCompat!>

Creates a message channel to communicate with JS and returns the message ports that represent the endpoints of this message channel.

open static Unit
postWebMessage(webview: WebView, message: WebMessageCompat, targetOrigin: Uri)

Post a message to main frame.

Public methods

postVisualStateCallback

open static fun postVisualStateCallback(webview: WebView, requestId: Long, callback: WebViewCompat.VisualStateCallback): Unit

Posts a VisualStateCallback, which will be called when the current state of the WebView is ready to be drawn.

Because updates to the DOM are processed asynchronously, updates to the DOM may not immediately be reflected visually by subsequent WebView#onDraw invocations. The VisualStateCallback provides a mechanism to notify the caller when the contents of the DOM at the current time are ready to be drawn the next time the WebView draws.

The next draw after the callback completes is guaranteed to reflect all the updates to the DOM up to the point at which the VisualStateCallback was posted, but it may also contain updates applied after the callback was posted.

The state of the DOM covered by this API includes the following:

  • primitive HTML elements (div, img, span, etc..)
  • images
  • CSS animations
  • WebGL
  • canvas
It does not include the state of:
  • the video tag

To guarantee that the WebView will successfully render the first frame after the VisualStateCallback#onComplete method has been called a set of conditions must be met:

When using this API it is also recommended to enable pre-rasterization if the is off screen to avoid flickering. See android.webkit.WebSettings#setOffscreenPreRaster for more details and do consider its caveats. This method should only be called if WebViewFeature#isFeatureSupported(String) returns true for WebViewFeature#VISUAL_STATE_CALLBACK.

Parameters
requestId WebView: An id that will be returned in the callback to allow callers to match requests with callbacks.
callback WebView: The callback to be invoked.

startSafeBrowsing

open static fun startSafeBrowsing(context: Context, callback: ValueCallback<Boolean!>?): Unit

Starts Safe Browsing initialization.

URL loads are not guaranteed to be protected by Safe Browsing until after callback is invoked with true. Safe Browsing is not fully supported on all devices. For those devices callback will receive false.

This should not be called if Safe Browsing has been disabled by manifest tag or . This prepares resources used for Safe Browsing.

This should be called with the Application Context (and will always use the Application context to do its work regardless).

Parameters
context Context: Application Context.
callback Context: will be called on the UI thread with true if initialization is successful, false otherwise.

setSafeBrowsingWhitelist

open static fun setSafeBrowsingWhitelist(hosts: MutableList<String!>, callback: ValueCallback<Boolean!>?): Unit

Sets the list of hosts (domain names/IP addresses) that are exempt from SafeBrowsing checks. The list is global for all the WebViews.

Each rule should take one of these:

Rule Example Matches Subdomain HOSTNAME example.com Yes .HOSTNAME .example.com No IPV4_LITERAL 192.168.1.1 No IPV6_LITERAL_WITH_BRACKETS [10:20:30:40:50:60:70:80]No

All other rules, including wildcards, are invalid.

The correct syntax for hosts is defined by RFC 3986.

Parameters
hosts MutableList<String!>: the list of hosts
callback MutableList<String!>: will be called with true if hosts are successfully added to the whitelist. It will be called with false if any hosts are malformed. The callback will be run on the UI thread

getSafeBrowsingPrivacyPolicyUrl

open static fun getSafeBrowsingPrivacyPolicyUrl(): Uri

Returns a URL pointing to the privacy policy for Safe Browsing reporting.

Return
Uri: the url pointing to a privacy policy document which can be displayed to users.

getCurrentWebViewPackage

open static fun getCurrentWebViewPackage(context: Context): PackageInfo?

If WebView has already been loaded into the current process this method will return the package that was used to load it. Otherwise, the package that would be used if the WebView was loaded right now will be returned; this does not cause WebView to be loaded, so this information may become outdated at any time. The WebView package changes either when the current WebView package is updated, disabled, or uninstalled. It can also be changed through a Developer Setting. If the WebView package changes, any app process that has loaded WebView will be killed. The next time the app starts and loads WebView it will use the new WebView package instead.

Return
PackageInfo?: the current WebView package, or null if there is none.

createWebMessageChannel

open static fun createWebMessageChannel(webview: WebView): Array<WebMessagePortCompat!>

Creates a message channel to communicate with JS and returns the message ports that represent the endpoints of this message channel. The HTML5 message channel functionality is described here

The returned message channels are entangled and already in started state.

Return
Array<WebMessagePortCompat!>: an array of size two, containing the two message ports that form the message channel.

postWebMessage

open static fun postWebMessage(webview: WebView, message: WebMessageCompat, targetOrigin: Uri): Unit

Post a message to main frame. The embedded application can restrict the messages to a certain target origin. See HTML5 spec for how target origin can be used.

A target origin can be set as a wildcard ("*"). However this is not recommended. See the page above for security issues.

Parameters
message WebView: the WebMessage
targetOrigin WebView: the target origin.