当前位置: 首页 > news >正文

微信小程序页面嵌套web-view点击系统导航返回时进行弹窗处理

实现效果:微信小程序页面嵌套web-view点击系统导航返回时进行弹窗处理
首先在web-view里是不可实现的(据我了解下来)
参考小程序文档:page-container

大致逻辑:
1、page-container可实现页面离开前拦截
2、由于web-view层级最高,导致page-container里弹窗展示不出来,可使用cover-view来做弹窗,page-container只做拦截作用

index.wxml:

<!-- page.wxml -->
<web-view src="https://www.baidu.com"/>
<page-containershow="{{showBackConfirm}}"bindbeforeleave="handleBackAttempt"bind:afterleave="resetInterceptor" 
>
</page-container>
<cover-view wx:if="{{isIntercepting}}" class="evaluate"><cover-view class="content"><cover-view>您觉得本次服务怎么样?</cover-view><cover-view class="star-list"><cover-image class="star" src="/assets/collect-block.png"></cover-image><cover-image class="star" src="/assets/collect-block.png"></cover-image><cover-image class="star" src="/assets/collect-block.png"></cover-image><cover-image class="star" src="/assets/collect-block.png"></cover-image><cover-image class="star" src="/assets/collect-block.png"></cover-image></cover-view><cover-view class="btns"><button bind:tap="cancelBack">取消</button><button bind:tap="confirmBack">已评价</button></cover-view></cover-view>
</cover-view>

index.js:

Page({data: {showBackConfirm: true,isIntercepting: false // 状态锁,防止重复触发},// ✅ 核心拦截函数(修正导航栏返回不生效问题)handleBackAttempt() {if (!this.data.isIntercepting) {this.setData({showBackConfirm: true,isIntercepting: true // 加锁}, () => {// 确保弹窗渲染完成wx.nextTick(() => {return false; // 必须返回 false 才能拦截});});}return false; // 双重保险},// ✅ 用户确认返回confirmBack() {this.setData({showBackConfirm: false}, () => {setTimeout(() => wx.navigateBack(), 50); // 确保弹窗关闭后再返回});},// ✅ 用户取消返回cancelBack() {this.setData({showBackConfirm: true,isIntercepting: false // 解锁});},// ✅ Android 物理返回键专项处理onBackPress() {if (!this.data.isIntercepting) {this.setData({showBackConfirm: true});return true; // 必须返回 true 才能拦截}return false;},// ✅ 阻止 iOS 右滑穿透(关键!)preventSwipe() {return; // 空函数阻止默认滑动},// ✅ 重置拦截状态resetInterceptor() {this.setData({isIntercepting: false});}
})

代码片段:https://developers.weixin.qq.com/s/As1z2uma8Q0i

http://www.xdnf.cn/news/689149.html

相关文章:

  • nt!CcGetVacbMiss函数分析之设置好nt!_VACB然后调用函数nt!SetVacb
  • LiveWallpaperMacOS:让你的 Mac 桌面动起来
  • Mac完美终端(iterm2 + oh my zash + tmux+ControlMaster)
  • Axure项目实战:运输统计页引入echarts实现高保真设计(JS代码ctrl+c ctrl+v懂得来)
  • OpenHarmony定制系统组合按键(二)
  • Pytest 是什么
  • 进阶知识:Selenium底层原理深度解析
  • Grafana-Gauge仪表盘
  • 5.28 后端面经
  • docker部署redis mysql nacos seata rabbitmq minio onlyoffice nginx实战
  • 20250528-C#知识:枚举
  • 20250528-C#知识:结构体
  • C# Socket对象创建方式详解
  • C接口 中文字符问题
  • 针对C++开发工具推荐及分析(涵盖IDE、编译器、调试工具和辅助工具)
  • 电脑开机后出现bootmgr is conmpressed原因及解决方法
  • 【Redis】基本架构
  • Dockerfile 构建优化的方法
  • 智变与重构:AI 赋能基础教育教学的范式转型研究报告
  • 理解 Vue 2 的响应式原理:数据劫持与依赖收集的背后
  • 第八天:面向对象编程
  • React---day3
  • CVE-2017-12629-XXE源码分析与漏洞复现
  • 设计模式24——访问者模式
  • 【AUTOSAR OS】 保护功能解析:从原理到应用与源代码解析(下篇)
  • 《Python+AI如何颠覆传统文书审查模式》
  • 【网络安全】——Modbus协议详解:工业通信的“通用语言”
  • JS 逆向太费劲,试试 JS 注入!
  • 服务器上用脚本跑python深度学习的注意事项(ubantu系统)
  • 【第2章 绘制】2.6 阴影