English
Component Type:UniWebViewElement
承载网页的容器
name | type | default | description |
---|---|---|---|
src | string(string.URIString) | - | webview 指向网页的链接 |
webview-styles | WebViewStyles | {"progress":{"color":"#00FF00"}} | webview 的样式 |
@message | (event: WebViewMessageEvent) => void | - | 网页向应用 postMessage 时触发。e.detail = { data } |
@error | (event: WebViewErrorEvent) => void | - | 网页加载错误时触发。e.detail = { errSubject, errCode, errMsg } |
@loaded | (event: WebViewLoadedEvent) => void | - | 网页加载完成后触发。e.detail = { url } |
@loading | (event: WebViewLoadingEvent) => void | - | 网页加载中触发。e.detail = { url } |
@download | (event: WebViewDownloadEvent) => void | - | 点击网页中可下载链接时触发。e.detail = { url, userAgent, contentDisposition, mimetype, contentLength } |
web-view组件的样式
name | type | optinal | default | description |
---|---|---|---|---|
progress | WebViewProgressStyles | boolean | YES | false | 网络地址页面加载进度条样式,设置为 false 时表示不显示加载进度条。 |
web-view组件的进度条样式
name | type | optinal | default | description |
---|---|---|---|---|
color | string.ColorString | YES | - | 网页加载进度条颜色,默认值为 #00FF00 。 |
name | type | required | default | description |
---|---|---|---|---|
detail | WebViewMessageEventDetail | YES | - | - |
target | Element | YES | - | 触发事件的组件 |
currentTarget | Element | YES | - | 当前组件 |
timeStamp | number | YES | - | 事件发生时的时间戳 |
name | type | optinal | default | description |
---|---|---|---|---|
data | Map<string, any> | NO | - | 消息包含的数据 |
name | type | required | default | description |
---|---|---|---|---|
stopPropagation | () => void | YES | - | 阻止当前事件的进一步传播 |
preventDefault | () => void | YES | - | 阻止当前事件的默认行为 |
name | type | required | default | description |
---|---|---|---|---|
detail | WebViewErrorEventDetail | YES | - | - |
target | Element | YES | - | 触发事件的组件 |
currentTarget | Element | YES | - | 当前组件 |
timeStamp | number | YES | - | 事件发生时的时间戳 |
name | type | optinal | default | description |
---|---|---|---|---|
errSubject | string | YES | - | 统一错误主题(模块)名称,固定值uni-web-view |
errCode | number | YES | - | 统一错误码 100001 ssl error 100002 page error 100003 http error |
errMsg | string | YES | - | 统一错误描述信息 |
name | type | required | default | description |
---|---|---|---|---|
stopPropagation | () => void | YES | - | 阻止当前事件的进一步传播 |
preventDefault | () => void | YES | - | 阻止当前事件的默认行为 |
name | type | required | default | description |
---|---|---|---|---|
detail | WebViewLoadedEventDetail | YES | - | - |
target | Element | YES | - | 触发事件的组件 |
currentTarget | Element | YES | - | 当前组件 |
timeStamp | number | YES | - | 事件发生时的时间戳 |
name | type | optinal | default | description |
---|---|---|---|---|
url | string | YES | - | 加载完成的网页链接 |
name | type | required | default | description |
---|---|---|---|---|
stopPropagation | () => void | YES | - | 阻止当前事件的进一步传播 |
preventDefault | () => void | YES | - | 阻止当前事件的默认行为 |
name | type | required | default | description |
---|---|---|---|---|
detail | WebViewLoadingEventDetail | YES | - | - |
target | Element | YES | - | 触发事件的组件 |
currentTarget | Element | YES | - | 当前组件 |
timeStamp | number | YES | - | 事件发生时的时间戳 |
name | type | optinal | default | description |
---|---|---|---|---|
url | string | YES | - | 加载中的网页链接 |
type | string | YES | - | 事件类型 |
target | Element | YES | - | 触发事件的组件 |
currentTarget | Element | YES | - | 当前组件 |
timeStamp | number | YES | - | 事件发生时的时间戳 |
stopPropagation | () => void | YES | - | 阻止当前事件的进一步传播 |
preventDefault | () => void | YES | - | 阻止当前事件的默认行为 |
name | type | required | default | description |
---|---|---|---|---|
stopPropagation | () => void | YES | - | 阻止当前事件的进一步传播 |
preventDefault | () => void | YES | - | 阻止当前事件的默认行为 |
name | type | required | default | description |
---|---|---|---|---|
detail | WebViewDownloadEventDetail | YES | - | - |
target | Element | YES | - | 触发事件的组件 |
currentTarget | Element | YES | - | 当前组件 |
timeStamp | number | YES | - | 事件发生时的时间戳 |
name | type | optinal | default | description |
---|---|---|---|---|
url | string | YES | - | 下载链接 |
userAgent | string | YES | - | 用户代理 |
contentDisposition | string | YES | - | 指示回复的内容该以何种形式展示,是以内联的形式(即网页或者页面的一部分),还是以附件的形式下载并保存到本地 |
mimetype | string | YES | - | 媒体类型 |
contentLength | number | YES | - | 文件大小 |
name | type | required | default | description |
---|---|---|---|---|
stopPropagation | () => void | YES | - | 阻止当前事件的进一步传播 |
preventDefault | () => void | YES | - | 阻止当前事件的默认行为 |
web-view元素对象
后退
前进
重新加载
停止加载
原生和WebView通信(执行JS脚本)
name | type | required | default | description |
---|---|---|---|---|
js | string | YES | - | - |
<template>
<view class="uni-flex-item">
<web-view id="web-view" class="uni-flex-item" :src="src" :webview-styles="webview_styles" @message="message"
@error="error" @loading="loading" @loaded="loaded" @download="download">
</web-view>
<view class="uni-padding-wrap uni-common-mt">
<view class="uni-input-v">
<input class="uni-input" confirmType="go" placeholder="输入网址跳转" @confirm="confirm" />
</view>
<view class="uni-row uni-btn-v">
<button class="uni-flex-item" type="primary" @click="back">后退</button>
<button class="uni-btn-ml uni-flex-item" type="primary" @click="forward">前进</button>
</view>
<view class="uni-row uni-btn-v">
<button class="uni-flex-item" type="primary" @click="reload">重新加载</button>
<button class="uni-btn-ml uni-flex-item" type="primary" @click="stop">停止加载</button>
</view>
<view class="uni-btn-v">
<button type="primary" @click="nativeToWeb">原生和Web通信</button>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
src: 'https://www.dcloud.io',
webview_styles: {
progress: {
color: '#FF3333'
}
},
webviewContext: null as WebviewContext | null,
loadError: false
}
},
onReady() {
this.webviewContext = uni.createWebviewContext('web-view', this)
},
methods: {
back() {
this.webviewContext?.back();
},
forward() {
this.webviewContext?.forward();
},
reload() {
this.webviewContext?.reload();
},
stop() {
this.webviewContext?.stop();
},
nativeToWeb() {
this.webviewContext?.evalJS("alert('hello uni-app x')");
},
message(event : WebViewMessageEvent) {
console.log(JSON.stringify(event));
},
error(event : WebViewErrorEvent) {
this.loadError = true
console.log(JSON.stringify(event));
},
loading(event : WebViewLoadingEvent) {
console.log(JSON.stringify(event));
},
loaded(event : WebViewLoadedEvent) {
console.log(JSON.stringify(event));
},
download(event : WebViewDownloadEvent) {
console.log(JSON.stringify(event));
uni.showModal({
content: "下载链接: " + event.detail.url + "\n文件大小: " + event.detail.contentLength / 1024 + "KB",
showCancel: false
});
},
confirm(event : InputConfirmEvent) {
console.log(JSON.stringify(event));
let url = event.detail.value;
if (!url.startsWith('https://') && !url.startsWith('http://')) {
url = 'https://' + url;
}
this.src = url;
}
}
}
</script>
<style>
.uni-input-v {
padding: 10rpx 0;
}
.uni-btn-ml {
margin-left: 10rpx;
}
</style>
Android version | Android uni-app | Android uni-app-x | iOS version | iOS uni-app | iOS uni-app-x | |
---|---|---|---|---|---|---|
web-view | 5.0 | √ | 3.9+ | 9.0 | √ | - |
Can't nest components
web-view的操作api为uni.createWebviewContext()。
给web-view组件设一个id属性,将id的值传入uni.createWebviewContext(),即可得到web-view组件的上下文对象,进一步可使用.evalJS()
、.reload()
等方法。
uts向web-view的网页发消息
使用evalJS()
方法,详见上方示例代码
web-view里的网页向uts发消息
在网页中引入uni.webview.1.5.5.js。即可在网页中调用一批uni的api,包括:
方法名 | 说明 | 平台差异说明 |
---|---|---|
uni.webView.navigateTo | navigateTo | |
uni.webView.redirectTo | redirectTo | |
uni.webView.reLaunch | reLaunch | |
uni.webView.switchTab | switchTab | |
uni.webView.navigateBack | navigateBack | |
uni.webView.postMessage | 向应用发送消息 |
在网页中使用uni.postMessage()
即可向uts发送消息。
uts端在 <web-view>
组件的 message
事件回调 event.detail.data
中接收消息。
示例代码详见hello-uni-app-x/hybrid/html/local.html
Tips
event.detail.data
中的数据,以数组的形式接收每次 post 的消息。(注:支付宝小程序除外,支付宝小程序中以对象形式接受)