uni-app 安卓8在webview回退无效这个问题怎么解决
uni-app 安卓8在webview回退无效这个问题怎么解决
基本信息
| 项目属性 | 详细信息 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境操作系统 | Windows |
| PC开发环境操作系统版本号 | 10 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 3.2.3 |
| 手机系统 | Android |
| 手机系统版本号 | Android 8.1 |
| 手机厂商 | vivo |
| 手机机型 | V1818A |
| 页面类型 | vue |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
示例代码:
<web-view
class="flex flex-1"
src="url"
ref="webview"
@message="getMessage"
>
</web-view>
getMessage(){
uni.navigateBack({
delta: 2
})
}
更多关于uni-app 安卓8在webview回退无效这个问题怎么解决的实战教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
是不是 webview 加载的网页中有二级页面?
更多关于uni-app 安卓8在webview回退无效这个问题怎么解决的实战教程也可以访问 https://www.itying.com/category-93-b0.html
没有,在别的手机没有问题,只有安卓8系统的
针对Android 8在Webview中回退无效的问题,这通常是由于Android系统版本兼容性及uni-app的Webview组件事件处理机制导致的。以下是具体解决方案:
1. 使用Webview自带的返回控制 在Webview页面内,通过监听页面事件来处理返回逻辑:
onBackPress() {
// 获取webview实例
const webview = this.$refs.webview;
if (webview && webview.canBack()) {
webview.back();
return true; // 阻止默认返回行为
}
return false;
}
2. 改进消息通信机制 当前代码中直接使用uni.navigateBack可能无法正确触发。建议改为:
getMessage(e) {
const data = e.detail.data[0];
if (data.action === 'goBack') {
const webview = this.$refs.webview;
if (webview && webview.canBack()) {
webview.back();
} else {
uni.navigateBack({ delta: 1 });
}
}
}
3. Android 8特定兼容处理 在Android 8设备上,需要额外处理Webview初始化:
mounted() {
// 延迟确保Webview完全加载
setTimeout(() => {
this.initWebview();
}, 300);
},
methods: {
initWebview() {
const pages = getCurrentPages();
const page = pages[pages.length - 1];
const webview = page.$getAppWebview();
if (webview) {
const currentWebview = webview.children()[0];
// 设置Android 8兼容参数
currentWebview.setStyle({
hardwareAccelerated: true
});
}
}
}
4. 使用plus.webview处理
const wv = plus.webview.currentWebview();
const current = wv.children()[0];
current.addEventListener('close', function() {
// 处理Webview关闭逻辑
}, false);

