源码还有注释放到github上了https://github.com/a951055/weixin-js-bridge-code
备注:非恶意拆解,仅用来检查微信真实支持接口
// 以下是微信jsBridge 对外抛出的接口
shareTimeline: "onMenuShareTimeline",
sendAppMessage: "onMenuShareAppMessage",
shareQQ: "onMenuShareQQ",
shareWeiboApp: "onMenuShareWeibo",
shareQZone: "onMenuShareQZone", // 以上部分可能是调用 分享的 方法, 貌似可以动过 JsBrige 直接调用? 还没测试柜规则是否允许
"menu:share:timeline": "onMenuShareTimeline", // 分享到朋友圈回调
"menu:share:appmessage": "onMenuShareAppMessage", // 分享到好友回调
"menu:share:qq": "onMenuShareQQ", // 分享到qq回调
"menu:share:weiboApp": "onMenuShareWeibo", // 分享到 微博回调
"menu:share:QZone": "onMenuShareQZone", // 分享到 qq空间回调
preVerifyJSAPI: "config", // 预先验证配置?
imagePreview: "previewImage", // 预览图片
geoLocation: "getLocation", // 获取 地址
openProductViewWithPid: "openProductSpecificView", // 跳转微信商品页
batchAddCard: "addCard", // 添加卡券到微信卡包
batchViewCard: "openCard", // 打开卡券
getBrandWCPayRequest: "chooseWXPay", // 调用微信支付
showPickerView: "showPickerView", // 选择视图 一般是底部选项菜单? android 和ios 应该不一样吧,但是应该调用的是微信的.
showDatePickerView: "showDatePickerView" // 打开时间选择器
tips
e.preventDefault(), e.stopPropagation();
阻断 浏览器的 拖拽,拖放操作, 这个理论上能解决左右划切出网页问题,没有具体测试。 参考 wx.js line:410微信 jsBridge 运作流程分析
ready
事件里调用.jsBridge 大致方法描述 wx.js
代码阅读逻辑可以不用考虑 69 行以前的代码,这部分是抛出对象方法用的 下方的方法阅读 按照方法名(就方法名的数字(源码是什么,不知道,具体功能是根据代码操作猜出来的))
20: 这个方法应该是打开跟微信 通信的 socket 用的 (猜测微信开发者工具使用)
233: 这个方法 使用来 获取 userAgent 标识, 以及判断不同环境下,要封禁的 window 的一些属性用的, 注意,小程序有单独的处理逻辑的
234: 监听 window消息推送,但是对于位置选择器会有一个特殊的处理逻辑,但是其他情况下不允许界面通信
235: 用来覆盖window对象,就api中微信允许使用的对象,这里是直接给window对象改了,像alert弹窗这些方法,也在这里面被覆盖了
236: 这个方法 是用来过滤window对象允许操作的规则的. 大概属于 235的 子方法
237:这个方法是用来定义window 规则的. 跟236类似,在js里面调用的对象,实际支持情况就在这里面
238: 阻断拖拽,拖放事件
239: 阻断 ctrl 键 + 鼠标滚轮缩放网页用的
240: 阻断网页右键菜单,因为微信用的 chrome的核,
241: 清理 window touch相关事件,然后将 WeixinJSBridge 挂到window对象上抛出 * 注意:这个应该是一个入口方法,因为后面的逻辑好像都从这里出去的
242: 242 是封装了一个 jsBridge 的对象壳,打印出来的就是这个
243: jsBridge invike 操作相关
244: 获取 sdk 支持接口列表 ? 猜测
245: 开放api列表 和 不能显示的api配置?
246: 应该是debug方法的注册完成回调, 猜测 65是 dubug的逻辑
247: 这里看起来是处理插件相关的逻辑
248: 跟socket有关,看下面代码 应该是创建一个跟 微信通信的操作类
249: 插件相关,通过 wechat ide 对插件进行操作
49: 这里也是个跟 socket 相关的,可能微信调试环境用的这个?
65: 可能是发送debug 相关的 内容吧 ? 猜的
// 20 应该是 微信开发者工具用的, 49 那个是 微信用的
jweixin js-sdk
源码大概拆了下,只有两个逻辑 判断
WeixinJSBridge
对象是否存在 和 调用invike
和on
方法 官网的 api 跟 sdk 的差不多,但是跟 JsBridge 支持的 差了些内容。具体开发 以 JsBridge 为准就好了.