uni-app使用web-view嵌套H5页面左滑后,在Android下可正常返回上一页,在鸿蒙系统下直接退出应用问题
uni-app使用web-view嵌套H5页面左滑后,在Android下可正常返回上一页,在鸿蒙系统下直接退出应用问题
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | W10 | HBuilderX |
HarmonyOS NEXT | HarmonyOS NEXT Developer Beta1 | |
Vue | vue3 |
操作步骤:
- uniapp使用web-view嵌套H5页面,左滑
预期结果:
- 返回上一页
实际结果:
- 退出当前应用
bug描述:
<template>
<view>
<web-view :src="src"></web-view>
</view>
</template>
<script>
var wv; //计划创建的webview
export default {
data() {
return {
src: "https://hm.hntxrj.com/",
canBack: false,
};
},
onBackPress() {
if (wv && this.canBack) {
wv.back();
return true;
}
return false;
},
onReady() {
var self = this;
var currentWebview = this.$scope
.$getAppWebview(); //此对象相当于html5plus里的plus.webview.currentWebview()。在uni-app里vue页面直接使用plus.webview.currentWebview()无效,非v3编译模式使用this.$mp.page.$getAppWebview()
setTimeout(function() {
wv = currentWebview.children()[0];
wv.addEventListener(
"progressChanged",
function(e) {
wv.canBack(function(e) {
self.canBack = e.canBack;
});
},
false
);
}, 500); //如果是页面初始化调用时,需要延时一下
},
};
```
uniapp使用web-view嵌套H5页面返回上一页问题。在android上可以正常返回,在鸿蒙中直接退出应用
```
更多关于uni-app使用web-view嵌套H5页面左滑后,在Android下可正常返回上一页,在鸿蒙系统下直接退出应用问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
<template>
<view>
<web-view :src="src"></web-view>
</view>
</template>
<script>
var wv; //计划创建的webview
export default {
data() {
return {
src: "https://hm.hntxrj.com/",
canBack: false,
};
},
onBackPress() {
if (wv && this.canBack) {
wv.back();
return true;
}
return false;
},
onReady() {
var self = this;
var currentWebview = this.$scope
.$getAppWebview(); //此对象相当于html5plus里的plus.webview.currentWebview()。在uni-app里vue页面直接使用plus.webview.currentWebview()无效,非v3编译模式使用this.$mp.page.$getAppWebview()
setTimeout(function() {
wv = currentWebview.children()[0];
wv.addEventListener(
"progressChanged",
function(e) {
wv.canBack(function(e) {
self.canBack = e.canBack;
});
},
false
);
}, 500); //如果是页面初始化调用时,需要延时一下
},
};
</script>
更多关于uni-app使用web-view嵌套H5页面左滑后,在Android下可正常返回上一页,在鸿蒙系统下直接退出应用问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在处理uni-app使用web-view
嵌套H5页面时,不同操作系统(如Android和鸿蒙系统)的滑动返回行为可能会存在不一致的问题。针对鸿蒙系统下左滑直接退出应用的问题,可以通过编程方式在H5页面中监听滑动事件,并尝试阻止默认行为或进行自定义处理。以下是一个基本的思路和代码示例,以供参考:
思路
- 监听滑动事件:在H5页面中监听用户的滑动事件。
- 判断滑动方向:判断用户是向左滑动还是向右滑动。
- 自定义处理:如果是向左滑动,则通过JavaScript控制页面导航,而不是让系统默认处理。
代码示例
HTML部分
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Web-view Slide Handling</title>
<style>
/* 样式可以根据需要调整 */
</style>
</head>
<body>
<div id="app">
<!-- 页面内容 -->
</div>
<script src="script.js"></script>
</body>
</html>
JavaScript部分(script.js)
document.addEventListener('DOMContentLoaded', () => {
let startX;
document.addEventListener('touchstart', (e) => {
startX = e.touches[0].pageX;
});
document.addEventListener('touchend', (e) => {
let endX = e.changedTouches[0].pageX;
let diffX = startX - endX;
if (diffX > 50) { // 判断为左滑,50为阈值,可以根据需要调整
// 在这里处理左滑逻辑,比如返回上一页
window.history.back();
// 阻止默认行为(如果适用)
e.preventDefault();
}
});
});
注意事项
- 阈值调整:滑动距离的阈值(如示例中的50)可能需要根据实际设备的屏幕大小和用户体验进行调整。
- 兼容性:确保上述代码在所有目标浏览器和设备上都能正常运行。某些老旧设备或浏览器可能不支持
touchstart
和touchend
事件。 - 性能考虑:对于复杂的页面或应用,频繁的事件监听和处理可能会影响性能。在必要时进行性能优化。
通过上述方法,可以在H5页面中监听并处理滑动事件,从而避免在鸿蒙系统下左滑直接退出应用的问题。不过,由于不同设备和操作系统的差异,可能还需要进行进一步的调试和优化。