背景:
对现有业务的jssdk做升级工作,从1.0.0升级到1.6.0。
业务场景:
微信分享功能
环境:
微信公众号
问题:
问题1:1.0.0版本的分享页面加载微信浏览器内置对象的时候默认不会调用WeixinJSBridge.on的callback函数,但是代码不变的情况下1.6.0版本下页面一加载的时候就直接触发WeixinJSBridge.on的callback函数,怀疑是在WeixinJSBridge.on的时候触发了对应的function函数的调用;另外说明一下,我的callback函数就是一个弹窗来提示用户分享是否成功的提示语。1.0.0的时候页面你打开不显示提示语,只有在实际分享后才会显示提示语,但是1.6.0版本下页面一加载后就直接弹出提示信息,奇怪的很。
具体问题:
我们的业务是基于公众号开发的,对于分享功能,调用了微信浏览器内置对象WeixinJSBridge,在分享页面和分享功能调用处会动态提前load shareWeixin.js,这是个初始化程序,负责初始化分享对象的基础{key:value}值,初始化微信浏览器对象并绑定事件(onBridgeReady)
initWeiXinJs();
function onBridgeReady() {
if (typeof WeixinJSBridge != "undefined") {
// 发送给好友
WeixinJSBridge.on('menu:share:appmessage', function (argv) {
WeiXinData.onShareFun();
WeixinJSBridge.invoke('sendAppMessage',WeiXinData, //WeiXinData.callBackFun
//res.errMsg,if it contains ':ok' means success,else false;
function(res){alert('invoke menu:share:appmessage ');WeiXinData.callBackFun(res);}
);
});
// 分享到朋友圈
WeixinJSBridge.on('menu:share:timeline', function (argv) {
WeiXinData.onShareFun();
WeixinJSBridge.invoke('shareTimeline', WeiXinData, //WeiXinData.callBackFun
function(res){WeiXinData.callBackFun(res);}
);
});
// 分享到微博
WeixinJSBridge.on('menu:share:weibo', function (argv) {
WeiXinData.onShareFun();
WeixinJSBridge.invoke('shareWeibo', { "content": WeiXinData.desc, "url": WeiXinData.link }, WeiXinData.callBackFun);
});
WeixinJSBridge.call('showOptionMenu');
}
var initFunc = function(){
if(typeof wx != 'undefined'){
wx.showOptionMenu();
// 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3
//"menuItem:share:appMessage",
wx.hideMenuItems({
menuList: WX_menuItems_allUnused().concat(WX_menuItems_browser())
});
/*
wx.showMenuItems({
menuList: WX_menuItems_share()
});
*/
// 发送给好友
wx.updateAppMessageShareData(WeiXinData);
// wx.onMenuShareAppMessage(WeiXinData); //old
// 分享到朋友圈
wx.updateAppMessageShareData(WeiXinData);
// wx.onMenuShareTimeline(WeiXinData); //old
// 分享到QQ?
//wx.onMenuShareQQ(WeiXinData);
// 分享到微博
wx.onMenuShareWeibo(WeiXinData);
// 分享到QQ空间?
//wx.onMenuShareQZone(WeiXinData);
} };
WeiXinData.imgUrl = WeiXinData.img_url;
WeiXinData.success = function(){
WeiXinData.callBackFun();
};
wx.ready(function(){
initFunc();
});
}
这段代码在1.0.0版本下,我在第一次打开有分享功能的页面的时候
目前我在微信开发者工具上测试提示WeixinJSBridge失效,但是我的iphone上完全ok,这说明微信平台还是在提供对WeixinJSBridge的支持。
看来只能顺应官方的掐脖子,取消WeixinJSBridge的应用
微信分享的回调很久之前就不支持了,意味着不能获取是否分享成功。
可能是他们调整了这个,可能逻辑由原来的点击分享后返回回调改成了进入页面就直接更新分享信息,所以你的代码在1.6.0的时候进入页面会直接弹出回调吧。