关于微信公账号H5 API 调用的坑 BUG

页面A已经配置过,如果是单页面跳转,则页面B可以共享当前的SDK配置(至少菜单是这样的)
刷新页面,原先的菜单仍然会保持原样,只是调用SDK已经失效了,需要重新配置,重新配置后,菜单仍然会保持原样(如果没有显式调用)
IOS不会保持原样!刷新页面所有菜单都出来了!!!
微信会记录当前页面的菜单(除非显示改变它,否则再次进来,即使刷新页面,仍然会保持原来的菜单样子)
重新进入公众号,菜单会恢复原样吗?

地理位置测试:如果A页面已经配置过SDK,能正确获取地理位置,但是B页面获取地理位置会报签名错误(也就是说路由切换时B页面是需要重新配置的),这个和菜单的显示隐藏不同!!!

设置分享内容测试:
如果A页面设置了分享内容,那跳转到B页面,分享时(没有重设分享内容),虽然内容已经不同,但仍然触发A页面设置的分享回调(这很危险,特别是B页面重新配置SDK失败或忘了配置的情况下,会产生逻辑错乱)
然后在B页面设置分享内容,分享失效(B页面没有重设sdk),回到A页面,然后分享,发现分享的内容是当时B页面设置的分享内容(回调也是B页面的结果)!!
然后A页面重设分享内容,可以设置成功

刷新页面后,分享内容的设置将失效
page2刷新页面,从page2调回到page1,重新配置微信SDK[ok],重新设置分享内容,分享内容无效(并且无法产生分享成功/取消的回调)

A页面配置了微信,并设置了分享内容,B页面重新配置了微信,没有设置分享内容,这时候分享居然是有效的,而且是A页面当时分享的内容
B页面设置分享内容,然后回到A页面,A页面分享出来的是B页面设置的分享内容(居然没有分享失效[相当于上次的微信配置仍然有效])

ios打开微信调试模式后,分享取消或成功,不会产生回调

ios取消分享,会成功回调(关闭微信调试模式后),但是分享成功不会立即回调(会有延迟[这个问题调试了很久!!我艹],解决办法是写在timeout里面!我日)


微信配置/成功/失败回调:
wx.ready是可以提前调用的,而且可以随意多次使用(微信配置好之后,都会依次调用[可以推断:wx.ready是push到注册config:ok事件的])
wx.error也可以提前调用,而且error只能被调用依次,后面的error调用总是覆盖前面的(可以推断出error是直接替换的)
wx.config/ready/error,三者没有严格的调用顺序要求

测试微信配置还没有彻底完成,就跳转路由:
A页面路由到B页面,如果B页面在500ms内(大概时间)就配置了sdk:ok,调用显示/隐藏,报:permission denied,调地理位置,同样报:permission denied.(所以在切换路由,进入页面马上配置微信,需要做延时调用)
入口页面即使在构造函数中,就开始配置微信也不会有任何问题

A页面配置微信,B页面直接调用显示/隐藏函数,报:permission denied,调用地理位置,报:invalid signature(本页面重新配置后,正常)
A页面正在配置微信(还没有结束),路由到B页面,B页面比A页面先配置微信(B页面会报两次invalid singature,所有的注册函数都会被调用两次)
B页面比A页面后配置微信,那么A页面的功能会报:invalid signature,B页面的一切正常

IOS:如果A页面还没有配置完,路由到了B页面,则A页面的所有功能函数回调都没问题,B页面报:invalid singature(但B页面的所有功能依然能够正常使用[及时B页面多次重新配置,报签名错误,仍然能够正常使用所有功能])一次配置,永久有效??
第一次配置就错误,后来手动配置成功,除了取微信坐标外所有功能都可以正常使用(debug模式下),非DEBUG模式下,还是都能正常调用(和Android一致)

微信的所有回调函数,都会使angular脱离作用域(作用域外执行的代码(如变量赋值),不会刷新视图)

外面订阅了Observerable,函数里面直接返回Observable.of<any>(),是否可以直接被调用

某些页面配置成功了,设置分享内容也成功了,分享的内容(链接和标题)是错误的
原因1:分享的页面必须是同域名页面,如果页面域名不同,分享设置无法生效!


原文地址:https://www.cnblogs.com/Denny_Yang/p/7513665.html