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

微信小程序页面嵌套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.lryc.cn/news/2392504.html

相关文章:

  • 从抄表到节能,电费管理系统如何重构公寓运营场景——仙盟创梦IDE
  • Rust 学习笔记:关于闭包的练习题
  • 记一次前端逻辑绕过登录到内网挖掘
  • 有什么excel.js支持IE11,可以显示EXCEL单元格数据,支持单元格合并,边框线,单元格背景
  • x86 与 ARM 汇编深度对比:聚焦 x86 汇编的独特魅力
  • Springboot 整合 WebSocket 实现聊天室功能
  • 用 Trae IDE 打造一个桌面小爬虫:从 PyQt5 开始,轻松采集掘金首页内容
  • python和风api获取天气(JSON Web Token)
  • 模板应用更新同步到所有开发中的应用
  • git和gitee的常用语句命令
  • 52、C# 泛型 (Generics)
  • 理解 Vue 2 的响应式原理:数据劫持与依赖收集的背后
  • 深入理解 Pinia:Vue 状态管理的革新与实践
  • Dubbo高频面试题
  • Allegro X PCB设计小诀窍--05.如何在Allegro X中实现隐藏电源飞线效果
  • 一篇文章教会你ESP8266串口WIFI无线模块实现物联网无线收发,附STM32代码示例
  • 算法-基础算法
  • 特种设备作业人员-G3锅炉水处理如何备考学习?
  • Reactor模式详解:高并发场景下的事件驱动架构
  • UniApp 生产批次管理模块技术文档
  • 项目日记 -Qt音乐播放器 -设置任务栏图标与托盘图标
  • 国产 BIM 软件万翼斗拱的技术突破与现实差距 —— 在创新与迭代中寻找破局之路
  • 记录算法笔记(2025.5.29)最小栈
  • Android SurfaceFlinger核心工作机制
  • Golang|etcd服务注册与发现 策略模式
  • 深度解析UniApp盲盒系统开发:从源码架构到多端部署全流程
  • STM32的OLED显示程序亲测可用:适用于多种场景的稳定显示解决方案
  • 【AI News | 20250529】每日AI进展
  • Day12 - 计算机网络 - HTTP
  • Linux驱动学习笔记(十)