以下反馈的问题,都已经保证 JSSDK 签名正常,wx.ready 返回成功,wx.error 无任何错误,而且同样的网页在微信内置浏览器中完全正常符合预期。仅小程序 web-view 中则某些 API 不符合预期,小程序的正式线上版、体验版、开发版均存在这些问题。基础库 1.7.1 ~ 1.7.4 真机均出现这些问题,但是开发者工具的模拟器中均不会出现这些问题。
1、iOS 微信版本 6.5.23
首次扫码(或搜索、点击卡片)进入小程序,JSSDK 调用 wx.openLocation 等需要签名的 API 不正常,无需签名的 wx.miniProgram.navigateTo 等 API 均可正常调用,表现是:
调用 wx.openLocation 返回成功,没有任何错误,但是不显示地图;wx.miniProgram.navigateTo 则可以正常跳转。
点击左上方 X 按钮关闭小程序(或者去别的微信页面,等待超时后自动退出),再次进入同样的小程序,则 JSSDK 全部 API 正常,即调用 wx.openLocation 返回成功,且可以跳转到地图,wx.miniProgram.navigateTo 也正常跳转。
这个问题仅在首次进入小程序时出现。
2、iOS 微信版本 6.6.1
无论小程序是首次进入,还是隐藏后进入,或隐藏自动退出后进入(新版已经没有 X 按钮了,只能隐藏),JSSDK 调用 wx.openLocation 等需要签名的 API 不正常,无需签名的 wx.miniProgram.navigateTo 等 API 均可正常调用,但有一个例外,JSSDK 的 wx.getLocation 可正常调用,可弹出是否允许使用位置的提示。
使用 tabBar 多个 web-view 时(如 tabBar 内含三个 Page,每个 Page 内各有一个 web-view,共 3 个 web-view),那么在第一个 tab 的 web-view 网页加载完成后,底部 tabBar 不会覆盖 web-view 内容,第二个、第三个 tab 中 web-view 网页加载完成后,底部 tabBar 会覆盖一部分在 web-view 内容上,给人的感觉是页面拉不到底。这个问题在 iOS 微信版本 6.5.23 中是没有的,新版是否改了导致不正常?
使用 tabBar 多个 web-view 时(如 tabBar 内含三个 Page,每个 Page 内各有一个 web-view,共 3 个 web-view),那么在第一个 tab 的 web-view 网页加载完成后,不点击其它 tab(即其它 web-view 未加载,仅加载了一个 web-view 网页) ,web-view 中调用 JSSDK,完全正常(需签名和无需签名的 API 均正常,如 wx.miniProgram.navigateTo 和 wx.openLocation 均能符合预期)
当点击第二个、第三个 tab,其中 web-view 加载后,再切换到第一个 tab 时,该页面调用 JSSDK 均不正常(需签名和无需签名的 API 均不正常,如 wx.miniProgram.navigateTo 和 wx.openLocation 均不符合预期,没有任何跳转行为)。
1、2、3 出现这些问题时,web-view 内 window.__wxjs_environment === ‘miniprogram’ 为 true,没有 js 错误。
请官方看看是否是 web-view 组件的 Bug,导致了上述这些问题。这些问题影响了 web-view 在小程序中的使用。
不只是说某段代码引起的,还需要满足上面说的条件才会重现,代码就是先引入 jweixin 1.3.0 的 js 文件,然后在 onclick 中调用 wx.miniProgram.navigateTo 和 wx.openLocation 等方法。
Android 中的 JSSDK (小程序 web-view 中)比较难以捉摸,特别是使用 tabBar 多个 web-view 时,一些时候可以调用 JSSDK 中的方法,一些时候则提示没有权限,同样的页面直接放到微信浏览器中就是完全正常的。
@周筱北 ,嗯,这个问题解决了吗,我也遇到了相同的问题。我用JSSDK1.3.2在webview调起scanQRCode时提示config:fail,签名是正常的。
wx.config({ debug: true , appId: "'" + data.appId + "'" , // data.appId 从接口获取 timestamp: data.timestamp, // data.timestamp 从接口获取 nonceStr: "'" + data.nonceStr + "'" , // data.nonceStr 从接口获取 signature: "'" + data.signature + "'" , // data.signature 从接口获取 jsApiList: [ // 必填,需要使用的JS接口列表 'checkJSApi' , 'scanQRCode' ] }); wx.ready( function () { wx.checkJsApi({ jsApiList: [ 'scanQRCode' ], success: function (res) { alert(JSON.stringify(res)); } }); wx.scanQRCode({ needResult: 1, // 0扫描结果由微信处理,1则直接返回扫描结果,默认为0 desc: '微信扫码' , success: function (res) { layer.close(i); alert(JSON.stringify(res)); } }); }); wx.error( function (res) { alert(JSON.stringify(res)); }); |