HellsingMatt
HellsingMatt
  • 发布:2021-08-04 16:01
  • 更新:2021-08-08 18:33
  • 阅读:1182

【已解决】 疑似使用 this.$scope.$getAppWebview().close() 关闭页面的 bug

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windos 10 21H1 19043.1151

HBuilderX类型: 正式

HBuilderX版本号: 3.1.22

手机系统: Android

手机系统版本号: Android 11

手机厂商: SONY

手机机型: Xperia 1 J9110

页面类型: vue

打包方式: 离线

项目创建方式: HBuilderX

操作步骤:
  1. 在第一个页面导航到第二个页面
uni.navigateTo({  
    url: '/pages/second'  
})

2.在第二个页面导航到第三个页面

uni.navigateTo({  
    url: '/pages/third'  
})

3.在第三个页面上监听 onBackPress() 并 return true 阻止返回,弹窗确认后关闭页面

export default {  
    name: 'third',  
    onBackPress() {  
        uni.showModal({  
            title: '确定返回?',  
            success(e) {  
                if (e.confirm) _this.$scope.$getAppWebview().close()  
            }  
        })  
        return true // 阻止返回  
    }  
}

4.回到第二个页面后使用同样的步骤

export default {  
    name: 'second',  
    onBackPress() {  
        uni.showModal({  
            title: '确定返回?',  
            success(e) {  
                if (e.confirm) _this.$scope.$getAppWebview().close()  
            }  
        })  
        return true // 阻止返回  
     }  
}

预期结果:

第二个页面关闭

实际结果:

第二个页面无法关闭

bug描述:

现有仨页面,后俩页面都监听了 onBackPress() 返回事件并 return true 阻止了返回,在第三个页面上使用 this.$scope.$getAppWebview().close() 关闭页面会导致前一个页面使用同一方法无法关闭

2021-08-04 16:01 负责人:无 分享
已邀请:
HellsingMatt

HellsingMatt (作者)

刚发现在第二个页面中按返回出现的弹窗居然是第三个页面的弹窗!
肿摸破???

DCloud_UNI_GSQ

DCloud_UNI_GSQ

销毁一个页面并非只关闭 webview 即可,还有很多工作要做。推荐使用封装好的 API:uni.navigateBack。自己增加一个状态来识别是否真的需要后退。

  • HellsingMatt (作者)

    已通过判断 onBackPress({ from }) 中的 from 是否是 backbutton 然后用 uni.navigateBack() 实现了,感谢回复

    2021-08-09 16:54

[已删除]

[已删除]

_this是哪里定义的?

该问题目前已经被锁定, 无法添加新回复