浅析"WeixinJSBridge is not defined"
Fundebug并没有使用微信 JS-SDK,然而却收到了WeixinJSBridge is not defined的报错:
我们的用户也收到了类似的错误报警,并且很多开发者都遇到类似的问题:
- 我的微信项目,没有用到微信 JS-SDK,但 iphone 部分手机点击某些功能无效,后来加了 window.onerror 监控,发现有 Uncaught ReferenceError: WeixinJSBridge is not defined 报错;
- 从微信进入支付中心直接唤起微信支付时有时会抛出 ReferenceError:weixinJSBridge is not defined 的异常;
- 使用 AppCan 生成 Web/微信 App 版,调用微信 JSAPI 支付方式,提示 WeixinJSBridge 内置对象 undefined;
- ......
由此可见,这是一个非常普遍的问题。但是如果没有在测试阶段没有遇到过,然后又没有做线上错误监控的话,就很难发现这个问题。我们在这里将这个错误进行一些分析,让大家少走弯路。
什么是微信 JS-SDK?
这里引用官方文档:
微信 JS-SDK 是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。通过使用微信 JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。
Q&A
我没有使用微信 JS-SDK, 为什么会报错呢?

微信内置浏览器会有 WeixinJSBridge,但是需要一定的加载时间。
我使用了微信 JS-SDK, 为什么会报错呢?
微信 webview 注入钩子有时序问题:在WeixinJSBridge还未注入之前,就已经成功注入其它依赖于WeixinJSBridge的其它 XX 模块。在 XX 模块中调用WeixinJSBridge就会失败。
如何解决?
如果你开发一款移动应用,必不可少要考虑分享到微信的功能;如果你开发网页,那么用户之间的分享更多的也是通过微信。那么这个问题到底有多严重,如何解决也变得至关重要。
未使用微信 JS-SDK
如果网页中未使用微信 JS-SDK, 用户在微信中打开网站可能会触发这个错误,目前看来只有忽略。因为是微信 JS-SDK 自身的问题,我们也无法控制。
关于微信支付
方法 1
监听 ready 事件之后再进行下一步操作
if (typeof window.WeixinJSBridge == "undefined") {
$(document).on("WeixinJSBridgeReady", function() {
$("#weiXinPay").click();
});
} else {
$("#weiXinPay").click();
}
方法 2
直接使用 JS-SDK 文档中的支付代码,不要使用公众号支付文档里面的代码。具体请参考微信 JS-SDK 说明文档 - 微信支付
PS: 关于这个问题的帖子从 2014 年开始就有了,然而问题依然存在,希望微信的同学能够给出官方的解决方案。
如何过滤"WeixinJSBridge is not defined"错误?
如果您使用了Fundebug的前端网页 JavaScript 错误监控服务,然后并不希望收到"WeixinJSBridge is not defined"的报错的话,阔以通过配置filters属性来过滤这个错误:
fundebug.filters = [
{
message: /WeixinJSBridge is not defined/
}
];
参考链接
- Uncaught ReferenceError: WeixinJSBridge is not defined
- Uncaught ReferenceError: WeixinJSBridge is not defined 问题
- 微信支付问题:Uncaught ReferenceError: WeixinJSBridge is not defined
- 传说中的 WeixinJSBridge 和微信 rest 接口
- 监听 wxbridge 加载后再唤起微信支付
关于Fundebug
Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了7亿+错误事件,得到了Google、360、金山软件、百姓网等众多知名用户的认可。欢迎免费试用!

版权声明
转载时请注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/02/18/weixinjsbridge-is-not-defined/
浅析"WeixinJSBridge is not defined"的更多相关文章
- 微信支付 WeixinJSBridge is not defined 报错
https://www.cnblogs.com/ottoman/p/7614419.html 我没有用到微信JS-SDK或者接口都正确返回预支付id都正确, 为什么会报这个错呢?答: 微信内置浏览器会 ...
- 深究WeixinJSBridge未定义之因
对于一个没有使用微信JS-SDK的网站来说,我们竟然收到了WeixinJSBridge is not defined 的报错: 去网上一搜,发现很多开发者都遇到类似的问题: 我的微信项目,没有用到微信 ...
- MS SQL统计信息浅析下篇
MS SQL统计信息浅析上篇对SQL SERVER 数据库统计信息做了一个整体的介绍,随着我对数据库统计信息的不断认识.理解,于是有了MS SQL统计信息浅析下篇. 下面是我对SQL Serve ...
- windows消息钩子注册底层机制浅析
标 题: [原创]消息钩子注册浅析 作 者: RootSuLe 时 间: 2011-06-18,23:10:34 链 接: http://bbs.pediy.com/showthread.php?t= ...
- typecho流程原理和插件机制浅析(第一弹)
typecho流程原理和插件机制浅析(第一弹) 兜兜 393 2014年03月28日 发布 推荐 5 推荐 收藏 24 收藏,3.5k 浏览 虽然新版本0.9在多次跳票后终于发布了,在漫长的等待里始终 ...
- Android开发之Theme、Style探索及源码浅析
1 背景 前段时间群里有伙伴问到了关于Android开发中Theme与Style的问题,当然,这类东西在网上随便一搜一大把模板,所以关于怎么用的问题我想这里也就不做太多的说明了,我们这里把重点放在理解 ...
- Linux 设备模型浅析之 uevent 篇(2)
Linux 设备模型浅析之 uevent 篇 本文属本人原创,欢迎转载,转载请注明出处.由于个人的见识和能力有限,不可能面 面俱到,也可能存在谬误,敬请网友指出,本人的邮箱是 yzq.seen@gma ...
- MFC浅析(4) CObject浅析
MFC CObject浅析 1.CObject简要声明 2.CRuntimeClass结构 3.RUNTIME_CLASS 4.DYNAMIC支持 5.DYNCREATE支持 6.SERIAL支持 C ...
- busybox(一)浅析
目录 busybox(一)浅析 引入 读取inittab 创建执行脚本链表 执行脚本 小结 title: busybox(一)浅析 tag: arm date: 2018-11-13 23:02:33 ...
随机推荐
- 通过MFC设计一个简单的计价程序
1.实验目的 掌握使用MFC应用程序向导创建应用程序的方法. 掌握新建对话框资源的方法. 掌握生成对话框的方法. 2.实验内容 用应用程序创建一个默认的对话框应用程序,在对话框中能进入下一个对话框,在 ...
- 项目Alpha冲刺(团队5/10)
项目Alpha冲刺(团队5/10) 团队名称: 云打印 作业要求: 项目Alpha冲刺(团队) 作业目标: 完成项目Alpha版本 团队队员 队员学号 队员姓名 个人博客地址 备注 221600412 ...
- AJAX从入门到放弃(一)
AJAX可以用于创建快速动态的网页(无需重新加载整个网页的情况下,能够更新部分网页的技术) 即异步的Javascript和XML,通过后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新. A ...
- hdoj6483 A Sequence Game(ST预处理RMQ+莫队)
传送:http://acm.hdu.edu.cn/showproblem.php?pid=6483 题意:有长度为$n$的数组,对于一个子区间$[l,r]$内,存在最大值$mx$与最小值$mi$,有$ ...
- Akka-Cluster(1)- Cluster Singleton 单例节点
关于cluster-singleton我在前面的博文已经介绍过,在这篇我想回顾一下它的作用和使用方法.首先,cluster-singleton就是集群某个节点上的一个actor.任何时间在集群内保证只 ...
- jquery 回车键实现表单提交
JQery http://jquery.cuishifeng.cn/keydown.html 键盘事件参考:1.keydown()keydown事件会在键盘按下时触发.2.keyup()keyup事件 ...
- HBase入门教程ppt
HBase – Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群.HBase利用Hado ...
- postgresql 获取修改列的值
使用returning CREATE TABLE users (firstname text, lastname text, id serial primary key); INSERT INTO u ...
- Android中内容提供者ContentProvider的详解
1.什么是ContentProvider 首先,ContentProvider(内容提供者)是android中的四大组件之一,但是在一般的开发中,可能使用的比较少. ContentProvider为不 ...
- Android 系统服务
模拟器版本 Android 4.1.2 - API Level 16 CMD 下输入:adb shell service list 服务名 对象 0 phone com.android.inter ...