不同系统下微信 onMenuShareTimeline 调用
来源:互联网 发布:西北大学网络教育 编辑:程序博客网 时间:2024/05/29 14:29
问题
一个商城项目,在首页和商品详情页有着不同的分享文案。测试的时候发现安卓系统下商品详情页的分享内容是首页的文案,但是 iOS 系统和微信开发者工具都是正常的…于是开始了排查之路。
首先来看下简化版的代码结构。
// 通用设置 - 全局设定分享信息window.globalShareDataWx = { title: 'test'}alert('全局环境');wx.ready(function(){ alert('ready环境'); wx.onMenuShareTimeline({ title: window.globalShareDataWx.title })})// 商品详情页 - 商品详情页异步获取商品信息后$.ajax({ success: function(data) { alert('异步环境'); wx.onMenuShareTimeline({ title: data.title }) }})
排查
因为分享出了问题,于是从分享函数开始排查,给分享函数中的 success
增加 alert 弹窗,结果发现安卓分享完后执行的是首页的分享函数。。这就不应该了,此时先注释掉全局分享函数,发现分享正常,难道安卓 wx.onMenuShareTimeline
只能设定一次?网上搜索并没有发现有这种说法….继续排查。
后来在两个分享函数附近的地方都增加弹窗了,然后发现了两个系统不一致的地方。重点!!!
// 安卓下弹出信息顺序
全局环境 => 异步环境 => ready环境
// iOS 下弹出信息顺序
全局环境 => ready环境 => 异步环境
结论
因为默认分享函数写在了全局通用方法中(埋下了大坑!),所以即使进入商品页后,这个函数还是存在的!!
此时执行顺序的不同,因此此时在 iOS 环境是可以正常分享商品详情的,但是在安卓环境下,因为分享函数会被 ready 环境中覆盖,导致无法实现预期情况!
于是对异步环境进行下面的补充
// 商品详情页异步获取商品信息后$.ajax({ success: function(data) { window.globalShareDataWx = { // 这里重新设置分享信息,安卓分享的时候调用这里的内容 title: data.title } alert('异步环境'); wx.onMenuShareTimeline({ title: data.title }) }})
此时可以解决安卓下分享问题。
反思
- 不应该偷懒把分享函数放到通用函数中,应该更进一步的拆分,按需引用,这样才不会导致冲突。要努力去学习 Webpack/ES6,模块化很大程度可以解决这种问题。
- 异步函数,不要想当然的按照自己以为的顺序执行,这次就是犯了这个错。
阅读全文
0 0
- 不同系统下微信 onMenuShareTimeline 调用
- wx.onMenuShareTimeline使用注意事项
- wx.onMenuShareTimeline使用注意事项
- 调用系统计算器 android(适用于不同品牌)
- 调用系统计算器 android(适用于不同品牌)
- 调用系统计算器 android(适用于不同品牌)
- js判断不同的系统,调用不同的代码,例如安卓和IOS
- iOS 不同版本调用系统拨打电话使用不同的方法,避免调用卡顿甚至奔溃。
- 系统解耦问题-不同系统间dubbo调用的异常处理-ExceptionFilter
- 不同客户端调用EJB
- lua不同模块调用
- 不同包的调用
- 系统调用与库函数对于不同buffer size写文件效率对比
- Linux添加系统调用(2.6.36版本)--添加到不同的文件
- linux系统调用64位汇编与32位汇编不同及兼容
- Android不同系统版本依然能调用到正确的API方法Demo——Service调用startForeground举例
- 关于通过intent调用不同activity,也就是调用各个页面,包括自己建的和系统已经有的
- 换行符 不同软件不同对待,不同系统不同对待
- 解决A master URL must be set in your configuration错误
- grep详解
- HTML标签
- JAVA之多线程(一)
- springmvc项目创建
- 不同系统下微信 onMenuShareTimeline 调用
- Android下的USB Host介绍和开发
- MAC下解决sudo: /etc/sudoers is owned by uid 501, should be 0的问题
- linux 下的nc使用
- POJ2084—Game of Connections(c++高精度)
- 让开发者更值钱的方法:培养稀缺
- Android 如何在插入外接物理键盘时还能显示软键盘
- 直方图中的最大矩形
- hive使用技巧(三)——巧用group by实现去重统计