页面中的WebView嵌入一个网络页面后,顶部原生导航栏默认是整个页面返回,而实际上我们需要操作的是WebView内网页的后退,因此我们可以通过获取子WebView对象进行操作
uni-app 的开发实际上本身就是在 WebView 上开发,只不过很多时候加载的是本地的网页资源。
而在 uni-app 中嵌入一个网络页面(外部资源),官方也提供了案例就是 vue 页面中在创建一个 web-view 标签。
<template>
<view>
<web-view src="http://www.mebugs.com/"></web-view>
</view>
</template>
加载一个网络页面需要解决一个比较尴尬的问题就是网页中做的导航和原生导航共存的问题。
对于 APP 而言,我们希望尽量使用原生导航,所以在实现中往往隐藏网页自带的导航,然后通过原生导航操作页面。
于是会发现一个问题,原生导航的返回往往是返回到上一个页面(这里指的是 uni-app 工程里面的上一页)。
优点:
缺点:
<template>
<view>
<web-view src="http://www.mebugs.com/"></web-view>
</view>
</template>
<script>
export default {
onNavigationBarButtonTap(e) {
var index = e.index;
if (index == 0) {
// 如果计数器>1 执行自WebView回退
if (this.index > 1) {
this.back();
} else {
// 框架回退
uni.navigateBack();
}
}
// 个人中心
if (index == 1)
uni.navigateTo({
url: "/pages/index/mine",
});
},
data() {
return {
currentWebview: false,
view: false,
index: 0,
};
},
onReady() {
this.initWebview();
},
methods: {
initWebview() {
//初始化并获取子WebView
// #ifdef APP-PLUS
this.currentWebview = this.$scope.$getAppWebview();
let this_ = this;
// 避免初始化失败 延时判断
setTimeout(function () {
this_.view = this_.currentWebview.children()[0];
if (this_.view) {
// 子WebView绑定打开新页面触发的事件方法
this_.view.onloading = this_.loadNewUrl();
} else {
// 如果子WebView还是没有 递归获取
this_.initWebview();
}
}, 1000);
// #endif
},
back() {
// 子webView回退
this.view.back();
this.index = this.index - 1;
},
loadNewUrl() {
// 计数器增加
this.index = this.index + 1;
},
},
};
</script>
温馨提示:系统将通过浏览器临时记忆您曾经填写的个人信息且支持修改,评论提交后仅自己可见,内容需要经过审核后方可全面展示。