uni-app openwindow打开多个页面后,重写mui.back无效

uni-app openwindow打开多个页面后,重写mui.back无效

开发环境 版本号 项目创建方式
HBuilderX 3.1.12 云端

在底部导航 页面的子页面 按钮点击openwindows多个页面后,plus加载后重写mui.back

var old_back = mui.back;
mui.back = function() {
    var btn = ["确定", "取消"];
    mui.confirm('确认关闭当前窗口?', 'Hello MUI', btn, function(e) {
        if (e.index == 0) {
            //执行mui封装好的窗口关闭逻辑;
            old_back();
        }
    });
}

更多关于uni-app openwindow打开多个页面后,重写mui.back无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app openwindow打开多个页面后,重写mui.back无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在uni-app中,mui.back重写无效通常是由于页面层级管理问题导致的。当使用uni.navigateToplus.webview.open打开多个页面时,每个页面都会创建独立的Webview实例,mui.back可能被后续页面的实例覆盖。

建议改用uni-app官方提供的页面生命周期和导航方法:

  1. 在需要拦截返回操作的页面中使用onBackPress生命周期:
export default {
  onBackPress(options) {
    uni.showModal({
      title: '提示',
      content: '确认关闭当前页面?',
      success: (res) => {
        if (res.confirm) {
          // 用户确认返回,执行默认返回逻辑
          // 无需额外操作,uni-app会自动处理返回
        }
      }
    })
    // 拦截返回操作,需要返回true
    return true
  }
}
  1. 如果需要更细粒度的控制,可以使用uni.addInterceptor拦截页面返回:
uni.addInterceptor('navigateBack', {
  invoke(args) {
    // 在这里添加确认逻辑
    return new Promise((resolve) => {
      uni.showModal({
        title: '确认返回',
        content: '确定要返回吗?',
        success: (res) => {
          if (res.confirm) {
            resolve(args) // 继续执行返回
          }
          // 取消时不resolve,阻止返回
        }
      })
    })
  }
})
回到顶部