This page was saved using WebZIP 7.0.3.1030 offline browser on 12/24/13 11:31:37.
Address: https://crxdoc-zh.appspot.com/apps/tags/webview.html
Title: webview 标签 - Google Chrome 应用开发文档(非官方中文版)  •  Size: 126213

<webview> 标签

描述 使用 webview 标签主动通过网络加载网上的活动内容,并将它嵌入在您的 Chrome 应用中。您的应用可以控制 webview 的外观,与网上内容交互,在嵌入的网页中进行导航,响应其中发生的错误事件等等。(请参见用法)。
可用版本 从 Chrome 25 开始稳定支持。
权限 "webview"

用法

使用 webview 标签在您的 Chrome 应用中嵌入“来宾”内容(例如网页)。来宾内容包含在 webview 容器中,您的 Chrome 应用中的嵌入者网页控制来宾内容的布局和渲染方式。

iframe 不同,webview 在单独的进程中运行,而不是在您的应用中。它并不拥有您的应用具有的权限,而且您的应用和嵌入内容之间的交互都是异步的,这样可以确保您的应用的安全,不受嵌入内容的影响。

例子

要想在您的应用中嵌入网页,请在您的应用的嵌入者页面(即显示来宾内容的应用页面)中添加 webview 标签。webview 标签最简单的形式包括网页的 src(来源)以及控制 webview 容器外观的 CSS 样式:

<webview id="foo" src="http://www.google.com/" style="width:640px; height:480px"></webview>

如果您希望以任何方式控制来宾内容,您可以编写 JavaScript,监听 webview 事件,并使用 webview 方法响应这些事件。如下是 app.js 中的示例代码,包含两个事件监听器:一个监听网页开始加载,另一个监听网页停止加载,并在加载的时候显示“正在加载...”消息:

onload = function() {
  var webview = document.getElementById("foo");
  var indicator = document.querySelector(".indicator");

  var loadstart = function() {
    indicator.innerText = "正在加载...";
  }
  var loadstop = function() {
    indicator.innerText = "";
  }
  webview.addEventListener("loadstart", loadstart);
  webview.addEventListener("loadstop", loadstop);
}

标签属性

src

<webview id="foo" src="http://www.google.com/" style="width:640px; height:480px"></webview>

返回可见的 URL,与浏览器多功能框的逻辑类似:如果嵌入者网页产生新的待定的导航则返回它,否则返回最后提交的导航。写入该属性将产生顶层导航。

src 设置为它本身的值会重新加载当前网页。

src 属性也可以接受数据 URL,例如 "data:text/plain,Hello, world!"

partition

<webview id="foo" src="http://www.google.com/" style="width:640px; height:480px" partition="persist:googlepluswidgets"></webview>

webview 标签使用的存储分区标识符。如果存储分区标识符以 persist: 开始(partition="persist:googlepluswidgets"),webview 将使用持久存储分区,对于应用中具有相同存储分区标识符的所有来宾都可用。如果没有设置标识符或者没有 persist: 前缀,webview 将使用内存中的存储分区。只有在第一次导航开始前才能修改该属性值,因为活动渲染器进程的存储分区不能更改。如果之后尝试修改这一值将会失败,并产生 DOM 异常。指定同一个分区标识符,多个 webview 可以共享同一个存储分区。

可能产生的异常: partition 属性必须有效,导航才能继续。如果指定了无效分区,例如 partition="persist:",您就无法设置 src 属性,并且还会产生异常。

autosize

<webview id="foo" src="http://www.google.com/" style="width:640px; height:480px" autosize="on" minwidth="576" minheight="432"></webview>

如果为 "on",webview 容器会在 minwidthminheightmaxwidthmaxheight 属性指定的范围内自动调整大小,只有启用 autosize 时这些属性才会影响 webview。启用自动调整大小后,webview 容器的大小不能小于最小值或大于最大值。

name

<webview src="https://www.google.com/" name="google-view"></webview>

该属性设置来宾内容的 window.name 对象。

<webview> 参考

类型

ClearDataOptions

指定 clearData 应该清除哪些数据的选项。

ClearDataOptions 的属性

since ( optional double )

清除指定日期及指定日期后积累的数据,表示为 1970 年 1 月 1 日以来所经过的毫秒数(可以通过 JavaScript Date 对象的 getTime 方法访问)。如果未指定,默认为 0(删除所有浏览数据)。

ClearDataTypeSet

数据类型的集合,未指定的属性认为是 false

ClearDataTypeSet 的属性

appcache ( optional boolean )

网站的应用程序缓存。

cache ( optional boolean )

浏览器缓存。注意:这会清除所有缓存内容,无论传递给 clearData 的时间是什么。

cookies ( optional boolean )

分区的 Cookie。

downloads ( optional boolean )

分区的下载项列表。

fileSystems ( optional boolean )

网站的文件系统。

formData ( optional boolean )

分区存储的表单数据。

history ( optional boolean )

分区的历史记录。

indexedDB ( optional boolean )

网站的 IndexedDB 数据。

localStorage ( optional boolean )

网站的本地存储数据。

serverBoundCertificates ( optional boolean )

服务器绑定的证书。

pluginData ( optional boolean )

插件数据。

passwords ( optional boolean )

保存的密码。

webSQL ( optional boolean )

网站的 WebSQL 数据。

InjectDetails

要插入的脚本或 CSS 的详情,必须设置 code 或 file 中的某一个属性,但是不能同时设置。

InjectDetails 的属性

code ( optional string )

要插入的 JavaScript 或 CSS 代码。

file ( optional string )

要插入的 JavaScript 或 CSS 文件。

ContentWindow

来宾窗口的消息传递句柄。

ContentWindow 的方法

postMessage

ContentWindow.postMessage(any message, string targetOrigin)

只要嵌入内容显示的是来自目标来源的网页,就向嵌入的网页内容发送消息。网页加载完成后该方法才可用,您可以监听 contentload 事件并调用该方法。

来宾可以通过接收到的消息事件中的 event.source 向嵌入者发送回复。

该 API 与 HTML5 postMessage API 等价,用于在网页间通信。嵌入者可以在自己的框架上添加 message 事件监听器来监听回复。

参数

message ( any )

要发送至来宾的消息对象。

targetOrigin ( string )

指定来宾窗口的来源,来源一致才会分发事件。

DialogController

附加到 dialog DOM 事件的接口。

DialogController 的方法

ok

DialogController.ok(string response)

接受对话框,等价于在 alertconfirmprompt 对话框中单击确定。

参数

response ( optional string )

接受 prompt 对话框时的响应字符串。

cancel

DialogController.cancel()

拒绝对话框,等价于在 confirmprompt 对话框中单击取消。

NewWindow

附加到 newwindow DOM 事件的接口。

NewWindow 的方法

attach

NewWindow.attach(object webview)

将请求的目标网页附加到现有的 webview 元素。

参数

webview ( object )

目标网页附加至哪一个 webview 元素。

discard

NewWindow.discard()

取消打开新窗口的请求。

MediaPermissionRequest

code>media permissionrequest(媒体权限请求)DOM 事件的 request 对象。

MediaPermissionRequest 的属性

url ( string )

请求访问用户媒体的框架 URL。

MediaPermissionRequest 的方法

allow

MediaPermissionRequest.allow()

允许权限请求。

deny

MediaPermissionRequest.deny()

拒绝权限请求。如果没有调用 allow,这是默认行为。

GeolocationPermissionRequest

geolocation permissionrequest(地理定位权限请求)DOM 事件的 request 对象。

GeolocationPermissionRequest 的属性

url ( string )

请求访问地理位置数据的框架 URL。

GeolocationPermissionRequest 的方法

allow

GeolocationPermissionRequest.allow()

允许权限请求。

deny

GeolocationPermissionRequest.deny()

拒绝权限请求。如果没有调用 allow,这是默认行为。

PointerLockPermissionRequest

pointerLock permissionrequest(指针锁定权限请求)DOM 事件的 request 对象。

PointerLockPermissionRequest 的属性

userGesture ( boolean )

指针锁定是否通过用户输入操作请求。

lastUnlockedBySelf ( boolean )

请求的框架是否是最近锁定指针的客户端。

url ( string )

请求指针锁定的框架 URL。

PointerLockPermissionRequest 的方法

allow

PointerLockPermissionRequest.allow()

允许权限请求。

deny

PointerLockPermissionRequest.deny()

拒绝权限请求。如果没有调用 allow,这是默认行为。

DownloadPermissionRequest

download permissionrequest(下载权限请求)DOM 事件的 request 对象。

DownloadPermissionRequest 的属性

requestMethod ( string )

与下载请求相关联的 HTTP 请求类型(例如 GET)。

url ( string )

请求的下载 URL。

DownloadPermissionRequest 的方法

allow

DownloadPermissionRequest.allow()

允许权限请求。

deny

DownloadPermissionRequest.deny()

拒绝权限请求。如果没有调用 allow,这是默认行为。

LoadPluginPermissionRequest

loadplugin permissionrequest(下载权限请求)DOM 事件的 request 对象。

LoadPluginPermissionRequest 的属性

identifier ( string )

插件的标识符字符串。

name ( string )

插件的显示名称。

LoadPluginPermissionRequest 的方法

allow

LoadPluginPermissionRequest.allow()

允许权限请求。如果没有调用 deny,这是默认行为。

deny

LoadPluginPermissionRequest.deny()

拒绝权限请求。

WebRequestEventInteface

使您访问来宾网页上网络请求事件的接口,有关网络请求生命周期以及相关概念的详情,请参见 chrome.webRequest 扩展程序 API。

为了演示用法上与扩展程序网络请求 API 的区别,考虑以下例子,阻止来宾请求所有匹配 *://www.evil.com/* 的 URL:

webview.request.onBeforeRequest.addListener(
  function(details) { return {cancel: true}; },
  {urls: ["*://www.evil.com/*"]},
  ["blocking"]);

此外,该接口的 onRequestonMessage 事件还支持声明式网络请求事件,有关 API 详情请参见 declarativeWebRequest

注意:声明式 webview 网络请求的条件和操作应该由对应的 chrome.webViewRequest.* 对象构造,以下示例代码以声明式的方式阻止 myWebView 中所有发送给 "example.com" 的请求:

var rule = {
  conditions: [
    new chrome.webViewRequest.RequestMatcher({ url: { hostSuffix: 'example.com' } })
  ],
  actions: [ new chrome.webViewRequest.CancelRequest() ]
};
myWebview.request.onRequest.addRules([rule]);

属性

contentWindow

<webview>.contentWindow
contentWindow ( ContentWindow )
可以用来向来宾网页发送消息的对象引用。

request

<webview>.request
request ( WebRequestEventInteface )
使您访问来宾网页上网络请求事件的接口。

方法

back

<webview>.back()

如果可能的话,后退导航至历史记录中的前一项,等价于 go(-1)

canGoBack

boolean <webview>.canGoBack()

表示能否后退导航历史记录。

canGoForward

boolean <webview>.canGoForward()

表示能否前进导航历史记录。

clearData

<webview>.clearData(ClearDataOptions options, ClearDataTypeSet types, function callback)

清除 webview 分区中的浏览数据。

参数

options ( ClearDataOptions )

指定清除哪些数据的选项。

types ( ClearDataTypeSet )

要清除的数据类型。

callback ( optional function )

数据成功清除后调用。

如果您指定了 callback 参数,它应该指定一个如下形式的函数:

function() {...};

executeScript

<webview>.executeScript(InjectDetails details, function callback)

向来宾网页插入 JavaScript 代码。

以下示例代码使用脚本插入的方式将来宾网页的背景颜色设置为红色:

webview.executeScript({ code: "document.body.bgColor = 'red'" });

参数

details ( InjectDetails )

要运行的脚本详情。

callback ( optional function )

所有 JavaScript 执行弯后调用。

如果您指定了 callback 参数,它应该指定一个如下形式的函数:

function(array of any result) {...};

result ( optional array of any )

插入的每一个框架中脚本的结果。

forward

<webview>.forward()

如果可能的话,前进导航至历史记录中的前一项,等价于 go(1)

getProcessId

integer <webview>.getProcessId()

返回来宾网页当前进程所对应的 Chrome 浏览器内部进程标识符,允许嵌入者了解终止该进程会影响多少来宾。只有两个来宾属于同一应用并且具有相同的存储分区标识符时,它们才会共用同一个进程。该调用是同步的,返回嵌入者缓存中的当前进程标识符,这一进程标识符与操作系统的进程标识符不同。

getUserAgent

string <webview>.getUserAgent()

返回由 webview 来宾网页请求使用的用户代理字符串。

go

<webview>.go(integer relativeIndex)

通过相对于当前导航的历史记录索引导航至历史记录中的某一项。如果请求的导航不可能完成,该方法没有任何效果。

参数

relativeIndex ( integer )

webview 应该导航至的相对历史记录索引。例如,2 会前进导航两个历史记录项(如果可能的话),-3 会后退导航三次。

insertCSS

<webview>.insertCSS(InjectDetails details, function callback)

在来宾网页中嵌入 CSS。

参数

details ( InjectDetails )

要嵌入的 CSS 详情。

callback ( optional function )

CSS 嵌入后调用。

如果您指定了 callback 参数,它应该指定一个如下形式的函数:

function() {...};

isUserAgentOverridden

<webview>.isUserAgentOverridden()

指示 webview 的用户代理字符串是否由 setUserAgentOverride 覆盖。

reload

<webview>.reload()

重新加载当前的顶层网页。

setUserAgentOverride

<webview>.setUserAgentOverride(string userAgent)

覆盖由 webview 来宾网页请求使用的用户代理字符串。

参数

userAgent ( string )

要使用的用户代理字符串。

stop

<webview>.stop()

停止加载当期 <webview> 导航(如果正在进行的话)。

terminate

<webview>.terminate()

强制终止来宾网页的渲染进程,这样可能会影响当前应用中共享同一个进程的多个 webview 标签,但不会影响其他应用中的 webview 标签。

DOM 事件

这些事件可以使用标准 HTML addEventListener API 添加监听器,监听器接收一个自定义的 Event 对象,可以包含附加属性,它们会在每一个事件中列出来。

close

来宾窗口尝试将自己关闭时产生。

以下例子在来宾尝试关闭自己时将 webview 导航至 about:blank

webview.addEventListener('close', function() {
  webview.src = 'about:blank';
});

consolemessage

来宾窗口记录控制台消息时产生。

以下例子将所有日志消息转发至嵌入者的控制台,忽略日志级别和其他属性。

webview.addEventListener('consolemessage', function(e) {
  console.log('来宾网页记录了一条消息:', e.message);
});

level ( integer )

日志消息的严重性级别,从 0 到 4。

message ( string )

日志消息的内容。

line ( integer )

消息来源行号。

sourceId ( string )

表示记录消息的资源的字符串。

contentload

来宾窗口产生 load 事件时产生。

以下例子在网页加载后修改来宾 body 元素的默认字体大小

webview.addEventListener('contentload', function() {
  webview.executeScript({ code: 'document.body.style.fontSize = "42px"' });
});

dialog

来宾窗口通过 window.alertwindow.confirmwindow.prompt 尝试打开有模式对话框时产生。

处理该事件时会阻塞来宾进程,直到每一个事件监听器都返回或 dialog 对象不可访问(如果调用了 preventDefault())。

默认行为是取消对话框。

messageType ( enum of "alert", "confirm", or "prompt" )

来宾请求的有模式对话框类型。

messageText ( string )

来宾希望在有模式对话框中显示的字符串。

dialog ( DialogController )

用于响应来宾的有模式对话框请求的接口。

exit

渲染来宾网页内容的进程退出时产生。

以下例子在来宾网页崩溃时显示告别消息:

webview.addEventListener('exit', function(e) {
  if (e.reason === 'crash') {
    webview.src = 'data:text/plain,再见!';
  }
});

processID ( integer )

退出的进程对应的 Chrome 浏览器内部标识符。

reason ( enum of "normal", "abnormal", "crash", or "kill" )

表示退出原因的字符串。

loadabort

顶层加载未提交就终止时产生。

url ( string )

请求的 URL。

isTopLevel ( boolean )

本次加载是在顶层还是子框架中。

reason ( enum of "networkError", "download", "canceled", "sslError", or "safeBrowsingError" )

表示终止类型的字符串。

loadcommit

加载提交后产生

url ( string )

提交的 URL。

isTopLevel ( boolean )

本次加载是在顶层还是子框架中。

loadredirect

顶层加载请求重定向至另一个 URL 时产生。

oldUrl ( string )

重定向前的请求 URL。

newUrl ( string )

重定向后的 URL。

isTopLevel ( boolean )

重定向是在顶层还是子框架中发生。

loadstart

开始加载时产生。

url ( string )

请求的 URL。

isTopLevel ( boolean )

本次加载是在顶层还是子框架中。

loadstop

来宾网页中的所有加载操作(包括所有子框架)完成后产生,除此之外也会产生相关的 loadcommitloadabort 事件,这些对每个框架都会产生。

newwindow

来宾网页尝试打开新的浏览器窗口时产生。

以下例子在嵌入者中为每一个请求的新窗口创建新的 webview 并开始导航:

webview.addEventListener('newwindow', function(e) {
  var newWebview = document.createElement('webview');
  document.body.appendChild(newWebview);
  e.window.attach(newWebview);
});

window ( NewWindow )

可以用来将请求的目标网页附加至现有的 webview 元素或显式取消请求的接口。

targetUrl ( string )

请求打开新窗口的目标 URL。

initialWidth ( double )

请求打开的新窗口的初始宽度。

initialHeight ( double )

请求打开的新窗口的初始高度。

name ( string )

请求打开的新窗口名称。

windowOpenDisposition ( enum of "ignore", "save_to_disk", "current_tab", "new_background_tab", "new_foreground_tab", "new_window", or "new_popup" )

请求打开新窗口的方式。

permissionrequest

来宾网页需要向嵌入者请求特殊权限时产生。

以下例子授予来宾网页访问 webkitGetUserMedia API 的权限。注意,使用该例子的应用本身必须指定 audioCapture 和/或 videoCapture 清单文件权限:

webview.addEventListener('permissionrequest', function(e) {
  if (e.permission === 'media') {
    e.request.allow();
  }
});

permission ( enum of "media", "geolocation", "pointerLock", "download", or "loadplugin" )

请求的权限类型。

requestId ( integer )

标志来宾的这一请求的数。

request ( object )

包含请求权限详情的对象,取决于请求的权限类型,可能为 MediaPermissionRequestGeolocationPermissionRequestPointerLockPermissionRequestDownloadPermissionRequestLoadPluginPermissionRequest 对象。

responsive

渲染来宾网页内容的进程失去响应后再恢复响应时产生。

以下例子在 webview 失去响应时淡出,恢复响应时淡入:

webview.style.webkitTransition = 'opacity 250ms';
webview.addEventListener('unresponsive', function() {
  webview.style.opacity = '0.5';
});
webview.addEventListener('responsive', function() {
  webview.style.opacity = '1';
});

processID ( integer )

恢复响应的进程所对应的 Chrome 浏览器内部标识符。

sizechanged

嵌入的网页内容大小更改时产生,只有在启用 autosize 时才会产生。

oldWidth ( double )

嵌入的网页内容原来的宽度。

oldHeight ( double )

嵌入的网页内容原来的高度。

newWidth ( double )

嵌入的网页内容的新宽度。

newHeight ( double )

嵌入的网页内容的新高度。

unresponsive

渲染来宾网页内容的进程失去响应时产生,如果来宾恢复响应,则会产生与之对应的 responsive 事件。

processID ( integer )

失去响应的进程所对应的 Chrome 浏览器内部标识符。