nvue页面
<hbb-webview src="https://baidu.com" />
自定义webview组件
<template>
<view v-if="loading" class="spinner">
<text class="spinner-txt">加载中</text>
</view>
</template>
<script>
export default {
name: 'HbbWebview'
props: {
src: {
type: String,
default: "",
},
},
data() {
return {
loading: false,
};
},
created() {
const web = plus.webview.create("", `custom-webview_${Date.now()}`, {
"uni-app": "none", // 不加载uni-app渲染层框架,避免样式冲突
top: uni.getSystemInfoSync().statusBarHeight + 44, // 顶部高度
bottom: 0,
opacity: 0, // 手动控制内容显示
bounce: "vertical", // 垂直方向有反弹效果
userSelect: false, // 表示可选择内容
errorPage: "none", // 不显示异常页面
});
this._web = web;
web.addEventListener("loaded", () => {
if (this._loaded) return; // 防止安卓下多次触发 loaded
this._loaded = true;
this.onLoading(false);
});
plus.globalEvent.addEventListener("plusMessage", this.onPlusMessage);
plus.webview.currentWebview().append(web);
web.loadURL(this.src);
this._timer1 = setTimeout(() => this.onLoading(true), 500); // 0.5s显示菊花
this._timer2 = setTimeout(() => this.onLoading(false), 2000); // 2s强制打开
},
beforeDestroy() {
plus.globalEvent.removeEventListener(this.onPlusMessage);
clearTimeout(this._timer1);
clearTimeout(this._timer2);
},
methods: {
onLoading(show = true) {
this.loading = show;
this._web.setStyle({ opacity: show ? 0 : 1 });
if (show) return;
clearTimeout(this._timer1);
clearTimeout(this._timer2);
},
onPlusMessage(event) {
console.log("onPlusMessage", event);
},
},
};
</script>
<style lang="scss" scoped>
.spinner {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
&-img {
width: 100rpx;
height: 100rpx;
}
&-txt {
font-size: 24rpx;
color: #999;
}
}
</style>
青阳_1900 (作者)
明天给你,今晚有其他事。页面事 demo.nvue, 组件事 hbb-webview.vue 这种情况下,webview 内注册plusMessage捕获不到消息,但是如果把页面改成demo.vue 就可以了。我安卓和苹果模拟器测试都是一样的。demo明天给你
2021-10-25 20:47
青阳_1900 (作者)
主要是nvue项目中打算使用自定义navigation-bar,然后和web-view组合。webview需要一些hack逻辑(evalJS的注入,titleupdate的捕获等),所以需要自己给予 plus.webview.create 封装一个webview组件出来
2021-10-25 20:49
132liyh
回复 青阳_1900: 有解决了吗
2021-11-17 10:18
青阳_1900 (作者)
回复 1***@sina.com: 由于没提供demo,官方还没处理,问题是有的
2021-11-18 11:39
[已删除]
回复 青阳_1900: 还没解决?
2021-12-04 17:12
青阳_1900 (作者)
回复 [已删除]: 不是没解决,是没处理
2021-12-07 11:33