小程序打开h5后返回与postmessage不实时接收问题
时间:2021-09-01
本文章向大家介绍小程序打开h5后返回与postmessage不实时接收问题,主要包括小程序打开h5后返回与postmessage不实时接收问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言背景
最近开发个小程序需要有安全验证功能,大概业务流程就是 一进来小程序唤起安全验证页面 -> 然后点击确认发送给小程序端并关闭当前页面。看似比较简单但是踩了一下午坑
webview
onMessage
经过查看找到啦webview api,可以打开一个h5页面,然后看了下webview 中的配置项
发现onMessage方法可以接收postMessage的方法。开始撸码
但是这个特定时机我确实没有立即理解上去,我以为和iframe差不多,是实时的,结果试了一下不行,才知道这个特定时机的关键。。。。
解读特定时机“后退、组件销毁、分享”
那么如何能达到这个特定时机呢?分享首先排除在外,所以只能思考如何实现组件销毁和后退,第一个思路就是h5怎么实现后退呢,或者跳转到某一页,所以发现可以在h5调用后退方法,但是后退只能是页面所以安全认证组件不能写在tabbar里面, 只能在写一个页面然后打开该页面才可以。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script> </head> <body> <button onclick="openBack()">点击我返回小程12</button> </body> <script> function openBack() { console.log('gggg') // wx.miniProgram.navigateTo('/pages/SecurityCheck/index') wx.miniProgram.postMessage({ data: { name: 'name', age: 12 } }) wx.miniProgram.navigateBack() } </script> </html>
看到注释开始用了wx.miniProgram.navigateTo,开始以为直接跳转到某一个路由就可以了,但是事实证明还是不能够,因为我们要跳转的是tabbar页面,所以只需要后退就可以。
本以为踩坑到此结束,但是点击死活没反应,小程序代码如下
点击没反应就开始排查,最后发现是打开页面的方法有误。
打开页面方式
路由有以上几个方法
- switchtab,跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。因为打开是新的页面所以不行
- relaunch, 开始我就用的这个方法,但是这个是关闭所有页面,打开到应用内的某个页面,所以他就没有上一页一说啦。
....
所以最后找到了navigateTo方法,才算踩坑结束
总结
- 必须是打开一个新的页面,用navigateTo
- postmessage后在h5中返回上一页。
原文地址:https://www.cnblogs.com/wenbodeboke/p/15215515.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- android studio 3.6.0 绑定视图新特性的方法
- Android ListView UI组件使用说明
- 解决laravel 出现ajax请求419(unknown status)的问题
- php求斐波那契数的两种实现方式【递归与递推】
- Android 自定义日期段选择控件功能(开始时间-结束时间)
- Yii框架日志操作图文与实例详解
- Flutter 实现虎牙/斗鱼 弹幕功能
- Yii框架中用response保存cookie,用request读取cookie的原理解析
- Yii框架操作cookie与session的方法实例详解
- php中钩子(hook)的原理与简单应用demo示例
- flutter仿微信底部图标渐变功能的实现代码
- Flutter 插件url_launcher简介
- Laravel框架查询构造器 CURD操作示例
- androidx下的fragment的lazy懒加载问题详解
- Thinkphp5框架简单实现钩子(Hook)行为的方法示例