以下反馈的问题,都已经保证 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 中是没有的,新版是否改了导致不正常?
3、Android 微信版本 6.5.23(Android 系统 4.4)/ 微信版本 6.6.1(Android 系统 6.0)
使用 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 在小程序中的使用。
@周筱北 ,嗯,这个问题解决了吗,我也遇到了相同的问题。我用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));
});
不只是说某段代码引起的,还需要满足上面说的条件才会重现,代码就是先引入 jweixin 1.3.0 的 js 文件,然后在 onclick 中调用 wx.miniProgram.navigateTo 和 wx.openLocation 等方法。
Android 中的 JSSDK (小程序 web-view 中)比较难以捉摸,特别是使用 tabBar 多个 web-view 时,一些时候可以调用 JSSDK 中的方法,一些时候则提示没有权限,同样的页面直接放到微信浏览器中就是完全正常的。
贴代码