uni-app Android回退手势操作一次会导致webview直接退出

发布于 1周前 作者 gougou168 来自 Uni-App

uni-app Android回退手势操作一次会导致webview直接退出

项目信息 详细信息
产品分类 uniapp/App
PC开发环境操作系统 Mac
PC开发环境操作系统版本号 15.0
HBuilderX类型 正式
HBuilderX版本号 4.28
手机系统 Android
手机系统版本号 Android 12
手机厂商 华为
手机机型 Nova12
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

hellouniappX项目中 组件-->网页-->web-view,进入二级或者三级页面,使用 回退手势操作,会直接回到首页,按一般操作系统,应该是回退到上一级页面

预期结果:

回到上一级页面

实际结果:

直接退出web view

bug描述:

hellouniappX项目中 组件–>网页–>web-view,进入二级或者三级页面,使用 回退手势操作,会直接回到首页,按一般操作系统,应该是回退到上一级页面


2 回复

在处理 uni-app 在 Android 设备上遇到的回退手势操作(即用户滑动屏幕边缘返回)导致 webview 直接退出的问题时,通常可以通过监听 Android 的系统回退事件,并在特定条件下阻止默认的返回行为来解决。以下是一个基于 uni-app 和 Vue.js 的示例代码,展示了如何捕获并处理 Android 的回退手势,避免直接退出应用。

1. 在 App.vue 中添加监听

首先,我们需要在 App.vue 文件中添加对 Android 系统回退事件的监听。

<script>
export default {
  onLaunch: function() {
    // 监听安卓返回事件
    plus.key.addEventListener('backbutton', () => {
      const pages = getCurrentPages();
      const currentPage = pages[pages.length - 1];
      
      // 判断当前页面是否是首页或者是否需要阻止返回
      if (currentPage.route === 'pages/index/index' || this.handleBack()) {
        // 如果是首页或处理返回逻辑后允许退出,则退出应用
        plus.runtime.quit();
      } else {
        // 否则返回上一页
        uni.navigateBack();
      }
    });
  },
  methods: {
    handleBack() {
      // 自定义的返回处理逻辑,比如弹出确认框
      uni.showModal({
        title: '提示',
        content: '确定要退出吗?',
        success: function (res) {
          if (res.confirm) {
            return true; // 允许退出
          } else if (res.cancel) {
            return false; // 阻止退出
          }
        }
      });
      // 注意:由于 showModal 是异步的,这里直接返回 undefined,逻辑在回调中处理
      return undefined;
    }
  }
}
</script>

2. 注意事项

  • handleBack 方法中,由于 uni.showModal 是异步的,我们不能直接返回其结果。因此,这里的逻辑是在模态框的回调中处理是否退出。
  • 示例中的 handleBack 方法只是展示了如何弹出一个确认框,实际应用中你可以根据需求实现更复杂的逻辑。
  • 记住,plus.key.addEventListener 是 5+ App(HBuilderX 打包的原生应用)特有的 API,不适用于纯 H5 环境。

通过上述方法,你可以有效地控制 Android 设备上的回退手势行为,避免在不需要退出应用的情况下直接关闭 webview。如果你的应用有特定的页面或场景需要特殊处理,可以在 handleBack 方法中添加相应的逻辑。

回到顶部