用于显示在线的html页面在webview的useragent后追加内容,格式是hap/<平台版本号>/<厂商标识> <平台应用包名>/<平台应用版本号> <应用包名>/<应用版本号> (<来源信息>)。“来源信息”与app接口的getInfo方法返回结果中的source字段相同。
<web>组件支持文件下载的能力,可以通过“打开网页”接口实现。
<web>组件支持如下属性。
| 名称 | 类型 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|---|
| src | string | - | 否 | 需要加载的页面地址。 注意: 1、如果页面中有使用定位功能,那么页面必须为https网站。 2、不建议使用http/https混合加载模式。 |
| supportzoom(1070+) | boolean | false | 否 | 网页是否支持放大缩小。 注意: 如果网页设置 user-scalable=no,则该网页不支持缩放。 |
| trustedurl(1020+) | array | - | 否 | 可信任的网址,支持正则表达式,默认为当前的src。 注意: 只有trustedurl中链接或者src链接的网页可以和框架进行双向通信。 |
| allowthirdpartycookies(1030+) | boolean | false | 否 | 是否支持跨域cookies传递,默认为false,即为不支持。 |
| showloadingdialog(1070+) | boolean | true | 否 | 是否展示加载进度条。 |
| useragent(1070+) | string | default | 否 | 设置web组件的userAgent,默认使用快应用的UA。
|
| algorithmsforlayout(1070+) | string | narrowcolumn | 否 | 设置底层布局算法。这将导致WebView的重新布局
|
| wideviewport(1070+) | boolean | true | 否 | 设置WebView是启用对“viewport” HTML meta tag 的支持,还是使用wide viewport。
|
| overviewmodeinload(1070+) | boolean | false | 否 | 设置WebView是否以overview模式加载页面,即按宽度缩小内容到屏幕内。当内容宽度大于WebView控件的宽度时,例如启用 wide viewport时,将考虑此设置。 |
| multiwindow(1070+) | boolean | false | 否 | 设置web组件是否支持启动多窗口。 |
| jumppolicy(1070+) | string | default | 否 | 多窗口打开的策略。
|
| openinbrowserurl(1070+) | array | - | 否 | 设置需要在系统浏览器中打开的多窗口URL,支持正则表达式配置。 |
| xrequestedwithpolicy(1070+) | number | 1 | 否 | 控制web组件发送http/https请求的头域x-requested-with的值。
|
| fullscreendirection(1070+) | string | landscape | 否 | 控制web组件全屏时屏幕的方向。
|
| initialscale(1077+) | number | - | 否 | 设置web组件显示内容的初始比例,单位百分比。如果设置该属性,需要同时显示设置wideviewport为false。 |
| renamejsinterface(1077+) | string | - | 否 | web组件和H5通信接口名称默认为system,如果system和其他接口名重复,可通过此属性修改Web组件和H5通信接口名称,以避免接口冲突。 |
| whiteDomain(1118+) | array | - | 否 | 用于检查加载url的域,默认值为当前src的域值,支持正则表达式。 白域列表以外的域在加载前需要用户批准。 |
web组件从1090版本开始,支持html5页面中input标签的capture属性。
web组件支持文件上传;从1040版本开始,可以拉起拍照界面、录制视频界面和录制音频界面。编辑需跳转界面的html文件,在html文件中对<input>组件进行设置,然后通过web组件的src属性调用此html文件。
<input type="file" accept="image/*"/> //选择图片时,可以选择所有图片文件 <input type="file" accept=".png,.gif,.jpeg"/> //选择图片时,可以选择accept中设置的图片格式文件 <input type="file" accept="image/png,image/gif,image/jpeg"/> //选择图片时,可以选择accept中设置的图片格式文件
<input type="file" accept="video/*"/> //选择视频时,可以选择所有视频文件 <input type="file" accept=".mp4"/> //选择视频时,可以选择accept中设置的视频格式文件
<input type="file" accept="audio/*"/> //选择音频时,可以选择所有音频文件
不支持swipe事件。低于1040版本不支持click事件。除了支持 通用事件 以外,还支持如下事件。
| 名称 | 参数 | 描述 |
|---|---|---|
| pagestart | {url: urlString, canBack: true/false 1080+, canForward: true/false 1080+} | 开始加载网页时触发。 |
| pagefinish | {url: urlString, canBack: true/false, canForward: true/false} | 网页加载完成时触发。 |
| titlereceive | {title: title} | 收到网页标题时触发。 |
| error | {errorMsg: errorMsg, url: urlString 1080+, canBack: true/false 1080+, canForward: true/false 1080+,errorType: typeInteger 1080+, code:codeInteger 1080+, description: descriptionString 1080+, isAuthorized: true/false 1080+} | 网页加载出现错误时触发或者打开的网页中存在错误时触发。 |
| message(1020+) | {message:messageString, url:urlString} | 接收到网页发来的消息时触发。 |
| progress(1070+) | {newProgress:newProgressString} | 网页加载进度发生改变时触发。 newProgress表示当前加载进度,范围0 ~ 100。 |
网页中可使用的事件:
| 名称 | 参数 | 描述 |
|---|---|---|
| system.onmessage(1020+) | string | 收到快应用发送的消息时触发。 |
| shouldoverrideurl(1110+) | string | URL即将加载到当前WebView时触发。 应用程序可以限制URL加载到当前WebView。
说明: 如果返回布尔值以外的任何内容,则默认返回false。 |
pagestart事件新增返回参数(1080+):
| 参数 | 类型 | 说明 |
|---|---|---|
| canBack | boolean | 是否可以向后浏览。 |
| canForward | boolean | 是否可以向前浏览。 |
error事件新增返回参数(1080+):
| 参数 | 返回值类型 | 描述 |
|---|---|---|
| url | string | WebView加载资源出错时,访问当前资源的链接地址。 |
| canBack | boolean | WebView加载资源出错时,当前的WebView是否可以向后浏览。 |
| canForward | boolean | WebView加载资源出错时,当前的WebView是否可以向前浏览。 |
| errorType | integer | WebView加载资源出错时,当前错误所属的类型,取值如下:
|
| code | integer | WebView加载资源出错时返回的错误码,例如:404、500。 |
| description | string | WebView加载资源出错时提示消息的描述。 |
| isAuthorized | boolean | WebView加载资源出错时,当前的异常域名是否已经授权。 |
| 名称 | 参数 | 描述 |
|---|---|---|
| reload | - | 重新加载页面。 |
| forward | - | 浏览历史页面中的前一个页面。 |
| back | - | 浏览历史页面中的后一个页面。 |
| canForward | {callback: Function} | 是否可以向前浏览。 |
| canBack | {callback: Function} | 是否可以向后浏览。 |
| postMessage(1020+) | {message:messageString, success: Function (1100+) , fail: Function (1100+) } | 向网页发送消息。 |
网页中可使用的方法(1020+):
| 名称 | 参数 | 描述 |
|---|---|---|
| system.postMessage | string | 发送到快应用的消息。 |
canForward回调函数返回参数:
| 名称 | 返回值类型 | 描述 |
|---|---|---|
| canForward | boolean | 是否可以向前浏览。 |
canBack回调函数返回参数:
| 名称 | 返回值类型 | 描述 |
|---|---|---|
| canBack | boolean | 是否可以向后浏览。 |
postMessage的参数说明(1100+):
| 名称 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| message(1020+) | string | 是 | 向网页发送的信息。 |
| success(1100+) | function | 否 | 发送成功的回调函数。 |
| fail(1100+) | function | 否 | 发送失败的回调函数。 |
Web组件支持全屏播放能力(1030+)。当全屏播放时,需要调用back方法才能退出全屏。如果您的快应用中的web组件已经对返回键进行了处理(当canBack时调用web组件的back),不需要额外处理。如果没有处理返回键事件,需要增加处理(示例代码如下),以实现全屏时点击返回键切回非全屏状态。
onBackPress() {
this.$element('web').canBack({
callback: function (e) {
if (e) {
this.$element('web').back();
} else {
router.back();
}
}.bind(this)
});
return true;
} 在 web 打开的网页中支持以下jssdk接口:
| 名称 | 参数 | 描述 |
|---|---|---|
| getEnv(1100+) | { data:{quickapp:Boolean} } | 检测是否在快应用环境。 |
| scan(1100+) | { scanType:int, success:Function, fail:Function, cancel:Function, complete:Function } | 快应用扫一扫功能。 |
示例代码
window.hap.getEnv(data => {
console.log(data.quickapp)
})
window.hap.scan({
scanType: 0, success: (data) => {
console.log(`handling success: ${data.result}`)
}, fail: (data, code) => {
console.log(`handling fail, code = ${code}`)
}, cancel: () => {
console.log('cancel')
}, complete: () => {
console.log('complete')
}
}) <template>
<div class="container">
<div class="titleBar">
<text class="titleBar-text" onclick="back">返回</text>>
<text class="titleBar-text">
{{title}}
</text>
<text class="titleBar-text" onclick="refresh">刷新</text>>
</div>
<web class="web-page" src="{{websrc}}" trustedurl="{{list}}" onpagestart="onPageStart" onpagefinish="onPageFinish" ontitlereceive="onTitleReceive"
onerror="onError" onmessage="onMessage" id="web" whiteDomain="{{domainList}}" intercepturl="{{interceptlist}} onshouldoverrideurl="shouldOverrideUrl" onintercepturl="intercepturl"></web>
</div>
</template>
<style>
.container {
flex-direction: column;
}
.titleBar {
flex-direction: row;
justify-content: space-between;
padding: 10px;
height: 100px;
width: 100%;
background-color: #a9a9a9;
}
.titleBar-text {
lines: 1;
text-overflow: ellipsis;
font-size: 40px;
color: #000000;
align-content: center;
}
.web-page {
width: 100%;
height: 800px;
}
</style>
<script>
import router from "@system.router"
import prompt from '@system.prompt'
export default {
data: {
title: "",
websrc: 'https://developer.huawei.com/consumer/cn/service/hms/fastapp.html',
arrowRightShow: true,
isRefreshing: false,
list: [/.*/, "new RegExp('https?.*')"],
// list: [/.*/],
domainList: ['*.huawei.com'],
interceptlist: ['https://consumer.huawei.com/en/worldwide/],
msg: ''
},
onInit() {
this.$on('arrowLeft', this.arrowLeftIcon)
this.$on('arrowRight', this.arrowRightIcon)
console.info('websrc: ' + this.websrc)
},
onPageStart(e) {
this.isRefreshing = false;
console.info('pagestart: ' + 'url is: ' + e.url, ' can go back: ' + e.canBack, ' can go forward: ' + e.canForward)
},
// 每次页面的切换会触发
onPageFinish(e) {
// console.info('pagefinish: '+e.url, e.canBack, e.canForward)
// 根据数据是否可以前进历史页面,隐藏右侧图标
this.arrowRightShow = e.canForward;
},
onTitleReceive(e) {
console.error('onTitleReceive', e.title);
this.title = e.title;
},
onError() {
console.info('pageError.'+ 'errorMsg: ' + e.errorMsg + ' url is: ' + e.url + ' can go back: ' + e.canBack + ' can go forward: ' + e.canForward + ' errorType: ' + e.errorType + ' code: ' + e.code + ' description: ' + e.description + ' isAuthorized: ' + e.isAuthorized)
},
onMessage(e) {
console.info('onmessage e = ' + e.message + ", url = " + e.url);
this.msg = e.message;
// prompt.showToast({
// message: e.message + ': ' + e.url
// })
},
shouldOverrideUrl(e) {
if (e.url.includes('training')) {
prompt.showToast({
message: '[shouldOverrideUrl] URL intercepted: ' + e.url,
duration: 2000,
gravity: 'center'
});
return true;
}
return false;
},
intercepturl(e) {
prompt.showToast({
message: '[intercepturl] URL intercepted: ' + e.url,
duration: 2000,
gravity: 'center'
});
}
},
arrowLeftIcon() {
this.isCanBack();
},
arrowRightIcon() {
this.isCanForward();
},
isCanForward() {
this.$element('web').canForward({
callback: function (e) {
if (e) {
this.$element('web').forward();
}
}.bind(this)
})
},
isCanBack() {
this.$element('web').canBack({
callback: function (e) {
if (e) {
this.$element('web').back();
} else {
router.back();
}
}.bind(this)
})
},
back() {
this.$dispatch("arrowLeft");
},
next() {
this.$dispatch('arrowRight');
},
refresh: function (e) {
this.$element('web').reload();
},
sendMessage: function () {
this.$element('web').postMessage({ message: 'message to Web page' });
}
}
</script> | 版本 | 发布日期 | 描述 |
|---|---|---|
| 1110 | 2024-02-07 |
|
| 1100 | 2022-07-07 |
|
| 1090 | 2022-05-19 | 支持html5页面中input标签的capture属性。 |
| 1080 | 2021-12-28 |
|
| 1070 | 2020-05-19 |
|
| 1040 | 2019-06-24 | 支持H5页面input标签的拍照、录视频、录音频,支持音频、视频、图片文件的选择。 |
| 1030 | 2018-10-31 |
|
| 1020 | 2018-06-20 |
|