<webview> webview标签
在隔离的框架和过程中显示外部Web内容。
进程: 渲染进程
webview 标签可将 guest 内容(例如外部网页)嵌入到应用中. 它不像 iframe , webview 和你的应用运行的是不同的进程.
它不具有与您的网页相同的权限,为确保应用不受嵌入内容的影响,应用和嵌入内容之间的交互全部都是异步的.
使用例子
webview嵌入范例:
<webview id="foo" src="https://www.github.com/" style="display:inline-flex; width:640px; height:480px"></webview>如果你要控制 guest 内容,你可以使用下文的 webview事件监听或方法进行响应.
下面是个loading条示例,它在页面开始加载时进行了监听,显示了 loading提示,加载完成后则停止继续监听:
<script>
onload = () => {
const webview = document.getElementById('foo')
const indicator = document.querySelector('.indicator')
const loadstart = () => {
indicator.innerText = 'loading...'
}
const loadstop = () => {
indicator.innerText = ''
}
webview.addEventListener('did-start-loading', loadstart)
webview.addEventListener('did-stop-loading', loadstop)
}
</script>CSS样式的两个注意点
第一点: 不要轻易覆盖 webview的display:flex
webview默认使用 display:flex来确保内部元素填充的宽高。 除非你为内联布局指定了 display:inline-flex,否则别覆盖默认的 display:flex CSS属性。
第二点:隐藏webview的正确方式
不要用 hidden属性或使用 display:none来隐藏 webview,则会导致内部 browserplugin对象出现异常.同时,当webview被取消隐藏时,web页面实际上是进行重新加载而不是如 display:block样式呈现的可见.
建议的方式是将 webview的宽高设置为零,并通过flex将元素缩小到0px尺寸,示例:
标签属性
webview标签具有以下属性:
src
src属性:加载到
webview的src还支持data协议,比如data:text/plain,Hello, world!
autosize
autosize属性:
on表示webview在minwidth,minheight,maxwidth, 和maxheight这些值范围内自适应尺寸
nodeintegration
nodeintegration属性:
on表示webview中的guest page 将整合 Node,并且拥有可以使用如require和process等系统底层资源
plugins
plugins属性:
on表示webview中的访客页面将能够使用浏览器插件。默认情况下禁用插件
preload
preload属性:其它脚本运行之前预先加载指定脚本
脚本的URL协议必须是 file: 或 asar:,因为它是由 require 加载到访客页面 无论页面是否集成Node,此脚本都可以访问所有Node API,但Node插入的全局对象会在此脚本完成执行后被删除。
httpreferrer
httpreferrer属性:设置访客页面的的引荐来源页
useragent
useragent属性:在导航到页面之前设置访客页面的用户代理
页面被加载后,可使用 setUserAgent 方法改变 useragent。
disablewebsecurity
disablewebsecurity属性:
on表示允许webview中的访客页面将能够禁用Web安全。默认情况下启用Web安全
partition
partition属性:设置页面使用的session
如果 partition以 persist:前缀,该页面将使用一个持久会话,该会话可用于应用程序中具有相同 partition的所有页面。
如果 partition没有 persist:前缀,该页面将使用内存中会话。
如果 partition为空,那么将返回应用程序的默认会话。
因为活动渲染器进程的会话不能更改,所以此值只能在第一个导航之前进行修改。此后尝试修改将会失败并抛出DOM异常。
allowpopups
allowpopups属性:
on表示允许访客页面打开新窗口。默认情况下禁用弹出窗口
webpreferences
webpreferences属性:在webview上 进行设置的
web首选项的字符串列表,用,分隔
支持的首选项字符串的完整列表,详见BrowserWindow.
字符串格式和 window.open中的features字符串一样,每个名称都默认为 true',允许使用=` 设置为另一个值。
其中,特殊值 yes'和1被解释为true,而no和0被解释为false`。
blinkfeatures
blinkfeatures属性:要启用的
特性的字符串列表,用,分隔
特性 完整列表,请详见[RuntimeEnabledFeatures.in][blink-feature-string].
disableblinkfeatures
disableblinkfeatures属性:要禁用的
特性的字符串列表,用,分隔
特性 完整列表,请详见[RuntimeEnabledFeatures.in][blink-feature-string].
guestinstance
guestinstance属性:将webview链接到实例标识符为指定值(如下文的
3)的webContents
webview首次加载的时候,将创建一个guestinstance等于其实例标识符的webContents。
现有的webview会触发 destroy事件,然后在加载新的URL时创建一个新的webContents。
disableguestresize
disableguestresize属性:调整webview元素尺寸时禁止其内容也跟随调整大小
通常和webContents.setSize结合使用,进行调整webview尺寸.
方法
webview 标签有以下方法: 注意: webview元素加载后才可以使用下列使用方法
<webview>.loadURL(url[, options])
<webview>.loadURL(url[, options])用途:加载
url到这个webview中,url必须指定协议如http://或file://
urlURLoptionsObject (可选)httpReferrerString (可选) - HTTP引荐来源网址userAgentString (可选) - 发起请求的用户代理extraHeadersString (可选) - 用\ n分隔的额外头postData(UploadRawData | UploadFile | UploadFileSystem | UploadBlob)[] - (可选)baseURLForDataURLString (可选) - 用于由数据URL加载的文件的基本URL(带尾随路径分隔符),只有当指定的url是数据url并且需要加载其他文件时,才需要这样做。
<webview>.getURL()
<webview>.getURL()用途:获得当前页面网址(
String)
<webview>.getTitle()
<webview>.getTitle()用途:获得当前页面标题(
String)
<webview>.isLoading()
<webview>.isLoading()用途:判断获得当前页面是否仍在加载资源(
Boolean)
<webview>.isWaitingForResponse()
<webview>.isWaitingForResponse()用途:判断获得当前页面是否等待页面主资源的第一次响应(
Boolean)
<webview>.stop()
<webview>.stop()用途:停止任何待处理的导航
<webview>.reload()
<webview>.reload()用途:重新加载当前网页
<webview>.reloadIgnoringCache()
<webview>.reloadIgnoringCache()用途:忽略缓存的重新加载当前网页
<webview>.canGoBack()
<webview>.canGoBack()用途:判断页面是否可以可后退至上个网页(
Boolean)
<webview>.canGoForward()
<webview>.canGoForward()用途:判断页面是否可以前进到下一个网页(
Boolean)
<webview>.canGoToOffset(offset)
<webview>.canGoToOffset(offset)用途:判断网页是否可以转到
offset这个页面(Boolean)
offsetString
<webview>.clearHistory()
<webview>.clearHistory()用途:清除历史记录
<webview>.goBack()
<webview>.goBack()用途:使页面后退往上一页
<webview>.goForward()
<webview>.goForward()用途:使页面前进往下一页
<webview>.goToIndex(index)
<webview>.goToIndex(index)用途:将页面导航到指定索引
index的网页
indexString
<webview>.goToOffset(offset)
<webview>.goToOffset(offset)用途:从当前页到导航指定
offset
offsetInteger
<webview>.isCrashed()
<webview>.isCrashed()用途:判断渲染器进程是否崩溃(
Boolean)
<webview>.setUserAgent(userAgent)
<webview>.setUserAgent(userAgent)用途:重定义网页的userAgent(
Boolean)
userAgentString
<webview>.getUserAgent()
<webview>.getUserAgent()用途:获取网页的userAgent(
String)
<webview>.insertCSS(css)
<webview>.insertCSS(css)用途:将CSS插入到当前网页中
cssString
<webview>.executeJavaScript(code, userGesture, callback)
<webview>.executeJavaScript(code, userGesture, callback)用途:判断是否可解析(eval)执行代码
code并返回执行promise解析结果(Promise)
codeStringuserGestureBoolean (可选) - 是否支持用户手势 默认为false.callbackFunction (可选) - 脚本执行后调用resultAny
将 userGesture 设置为 true,可对去除 某些HTML API 只能通过 手势 进行调用 的限制,比如 requestFullScreen。
例子,返回一个代码解析结果:
<webview>.openDevTools()
<webview>.openDevTools()用途:打开页面的开发者工具栏
<webview>.closeDevTools()
<webview>.closeDevTools()用途:关闭页面的开发者工具栏
<webview>.isDevToolsOpened()
<webview>.isDevToolsOpened()用途:判断页面的开发者工具栏是否已打开(
Boolean)
<webview>.isDevToolsFocused()
<webview>.isDevToolsFocused()用途:判断页面的开发者工具栏是否已聚焦(
Boolean)
<webview>.inspectElement(x, y)
<webview>.inspectElement(x, y)用途:在页面的 (
x,y) 开始检查元素
xIntegeryInteger
<webview>.inspectServiceWorker()
<webview>.inspectServiceWorker()用途:打开页面中用于服务工作者上下文的开发者工具栏
<webview>.setAudioMuted(muted)
<webview>.setAudioMuted(muted)用途:使当前网页上的音频静音
mutedBoolean
<webview>.isAudioMuted()
<webview>.isAudioMuted()用途:判断网页是否已静音(
Boolean)
<webview>.undo()
<webview>.undo()用途:在网页中执行撤销(
undo)
<webview>.redo()
<webview>.redo()用途:在网页中执行重做(
redo)
<webview>.cut()
<webview>.cut()用途:在网页中执行剪切(
cut)
<webview>.copy()
<webview>.copy()用途:在网页中执行复制(
copy)
<webview>.paste()
<webview>.paste()用途:在网页中执行粘贴(
paste)
<webview>.pasteAndMatchStyle()
<webview>.pasteAndMatchStyle()用途:在网页中执行粘贴并清除样式(
pasteAndMatchStyle)
<webview>.delete()
<webview>.delete()用途:在网页中执行删除(
delete)
<webview>.selectAll()
<webview>.selectAll()用途:在网页中执行全选(
selectAll)
<webview>.unselect()
<webview>.unselect()用途:在网页中执行取消选择(
unselect)
<webview>.replace(text)
<webview>.replace(text)用途:在网页中执行替换(
replace)文本(text)
textString
<webview>.replaceMisspelling(text)
<webview>.replaceMisspelling(text)用途:在网页中执行校正(
replaceMisspelling)错别字(text)
textString
<webview>.insertText(text)
<webview>.insertText(text)用途:插入
text到焦点元素
textString
<webview>.findInPage(text[, options])
<webview>.findInPage(text[, options])用途:在页面中发起一个请求进行查找
text并返回一个Integer当做请求id
textString - 查找的内容, 不能为空.optionsObject (可选)forwardBoolean - (可选) 是否向前或向后查找, 默认为true.findNextBoolean - (可选) 是否连续查找, 默认为false.matchCaseBoolean - (可选) 查找是否区分大小写,, 默认为false.wordStartBoolean - (可选) 是否仅以首字母查找.. 默认为false.medialCapitalAsWordStartBoolean - (可选) 如果按大写字母开头匹配,那么后面的小写字母或无字母或多词合成等都视为匹配,默认为false.
您可以通过
found-in-page事件获取相应的请求结果.
<webview>.stopFindInPage(action)
<webview>.stopFindInPage(action)用途:使用给定的
action来为webContents停止任何findInPage请求
actionString - 指派[webContents.findInPage]请求结束时要执行的操作。clearSelection- 清除选择。keepSelection- 转为没有任何action的普通选择activateSelection- 聚焦并单击该选择
<webview>.print([options])
<webview>.print([options])用途:打印
webview'页面
更多细节,详见 webContents.print([options]).
<webview>.printToPDF(options, callback)
<webview>.printToPDF(options, callback)用途:打印预览中将
webview网页打印为PDF并调用callback
更多细节,详见 webContents.printToPDF(options, callback).
<webview>.capturePage([rect, ]callback)
<webview>.capturePage([rect, ]callback)用途:截图
rect区域并调用callback
更多细节,详见 webContents.capturePage([rect, ]callback).
<webview>.send(channel[, arg1][, arg2][, ...])
<webview>.send(channel[, arg1][, arg2][, ...])用途:通过
channel向渲染进程异步发送消息或任意参数
channelString...argsany[]
参数将在JSON内部序列化,因此不会包含函数或原型链。渲染进程通过用 ipcRenderer 模块侦听 channel来处理它。 更多细节,详见webContents.send
<webview>.sendInputEvent(event)
<webview>.sendInputEvent(event)用途:向页面发送输入
event
eventObject更多细节,详见webContents.sendInputEvent
<webview>.setZoomFactor(factor)
<webview>.setZoomFactor(factor)用途:设置页面的缩放系数
factorNumber - 缩放系数
注意:缩放系数是百分制的,如3.0=300%。
<webview>.setZoomLevel(level)
<webview>.setZoomLevel(level)用途:将缩放级别更改为指定级别
levelNumber - 缩放级别
原始大小为0,每个增量表示放大或缩小20%,默认限制为原始大小的300%至50%。
<webview>.showDefinitionForSelection() macOS
<webview>.showDefinitionForSelection() macOS用途:在页面上搜索所选字词时弹出字典
<webview>.getWebContents()
<webview>.getWebContents()用途:获取
webview.页面内容(WebContents)
DOM事件列表
webview含有以下DOM事件:
事件: 'load-commit'
触发:加载完成时
urlStringisMainFrameBoolean
包含当前文档导航和副框架的文档加载,但是不包含异步资源加载.
事件: 'did-finish-load'
触发:导航完成时(即选项卡中的微调框(spinner)已停止旋转,并且已分派
onload事件)
事件: 'did-fail-load'
触发:加载失败或者是被取消(比如调用了
window.stop())时
返回:
errorCodeIntegererrorDescriptionStringvalidatedURLStringisMainFrameBoolean
事件: 'did-frame-finish-load'
触发:文档完成导航时
返回:
isMainFrameBoolean
事件: 'did-start-loading'
触发:选项卡中的微调框(spinner)开始旋转(loading)时
事件: 'did-stop-loading'
触发:选项卡中的微调框(spinner)结束了旋转(loading)时
事件: 'did-get-response-details'
触发:所请求资源的相关详细信息可用时
返回:
statusBoolean 下载资源的套接字连接newURLStringoriginalURLStringhttpResponseCodeIntegerrequestMethodStringreferrerStringheadersObjectresourceTypeString
事件: 'did-get-redirect-request'
触发:发起的请求资源被重定向时
返回:
oldURLStringnewURLStringisMainFrameBoolean
事件: 'dom-ready'
触发:文档 加载完成时
事件: 'page-title-updated'
触发:网页标题被更新时 返回:
titleStringexplicitSetBoolean
当异步加载文档标题时, explicitSet为 false.
事件: 'page-favicon-updated'
触发:网页接收到(图标的url)favicon url时
返回:
faviconsString[] - URL数组
事件: 'enter-html-full-screen'
触发: 通过HTML API进入全屏时触发时
事件: 'leave-html-full-screen'
触发:通过HTML API退出全屏时触发时
事件: 'console-message'
触发:客户机窗口记录控制台消息时
返回:
levelIntegermessageStringlineIntegersourceIdString
以下是将监听控制台并输出日志消息的示例:
事件: 'found-in-page'
触发:[
webContents.findInPage]进行页内查找并且找到可用值时
返回:
resultObjectrequestIdIntegeractiveMatchOrdinalInteger - 活动匹配位置matchesInteger -匹配数selectionAreaObject -第一个匹配区域的坐标。finalUpdateBoolean
事件: 'new-window'
触发:页面请求为
url打开一个新窗口时
返回:
urlStringframeNameStringdispositionString - 可为default,foreground-tab,background-tab,new-window,save-to-disk和other.optionsObject - 创建新的BrowserWindow时使用的参数.
当页面通过 window.open或外部链接(如 <a target='_blank'>)来请求 url打开一个新窗口(默认创建一个新的 BrowserWindow)时触发。
使用系统默认浏览器打开链接的示例:
事件: 'will-navigate'
触发:用户或页面想要开始导航(比如更改
window.location对象或用户单击页面中的链接)时
返回:
urlString
如果是 以<webview>.loadURL和 <webview>.back之类的API以编程方式启动导航,以及在页内跳转如点击了锚链接或更新 window.location.hash时,该事件不会触发,这时您可以使用 did-navigate-in-page事件达到目的。
需要阻止导航,请调用 event.preventDefault()。
事件: 'did-navigate'
触发:导航完成时
返回:
urlString导航完成时触发.
在页内跳转如点击了锚链接或更新 window.location.hash,时,该事件不会触发,这时您可以使用 did-navigate-in-page事件达到目的。
事件: 'did-navigate-in-page'
触发:页内跳转时
返回:
isMainFrameBooleanurlString
如点击了锚链接 或 DOM的hashchange事件被触发时.虽然页面的url已改变但它不会跳出界面
事件: 'close'
触发:访客页面尝试关闭自身时
关闭时客户端将 webview导航到 about:blank的例子:
事件: 'ipc-message'
返回:
触发:访客页面发送异步消息至它所在的嵌入页时
channelStringargsArray
您可以通过 sendToHost方法和 ipc-message事件在访客页面与它所在的嵌入页之间轻松地进行通信:
事件: 'crashed'
触发:渲染器进程崩溃时
事件: 'gpu-crashed'
触发:gpu进程崩溃时
事件: 'plugin-crashed'
触发:插件进程崩溃时
返回:
nameStringversionString
事件: 'destroyed'
触发:
webContents被销毁时
事件: 'media-started-playing'
触发:媒体开始播放时
事件: 'media-paused'
触发:媒体暂停或播放完毕时
事件: 'did-change-theme-color'
触发:页面的主题颜色被更改时
返回:
themeColorString
通常是因为使用了元标记如theme-color引起:
事件: 'update-target-url'
触发:鼠标移动到链接或键盘将焦点移动到链接时
返回:
urlString
事件: 'devtools-opened'
触发:开发调试工具打开时
事件: 'devtools-closed'
触发:开发调试工具关闭时
事件: 'devtools-focused'
触发:开发调试工具被聚焦或打开时
[blink-feature-string]: https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.in
Last updated
Was this helpful?