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/
}
];

参考链接

关于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"的更多相关文章

  1. 微信支付 WeixinJSBridge is not defined 报错

    https://www.cnblogs.com/ottoman/p/7614419.html 我没有用到微信JS-SDK或者接口都正确返回预支付id都正确, 为什么会报这个错呢?答: 微信内置浏览器会 ...

  2. 深究WeixinJSBridge未定义之因

    对于一个没有使用微信JS-SDK的网站来说,我们竟然收到了WeixinJSBridge is not defined 的报错: 去网上一搜,发现很多开发者都遇到类似的问题: 我的微信项目,没有用到微信 ...

  3. MS SQL统计信息浅析下篇

       MS SQL统计信息浅析上篇对SQL SERVER 数据库统计信息做了一个整体的介绍,随着我对数据库统计信息的不断认识.理解,于是有了MS SQL统计信息浅析下篇. 下面是我对SQL Serve ...

  4. windows消息钩子注册底层机制浅析

    标 题: [原创]消息钩子注册浅析 作 者: RootSuLe 时 间: 2011-06-18,23:10:34 链 接: http://bbs.pediy.com/showthread.php?t= ...

  5. typecho流程原理和插件机制浅析(第一弹)

    typecho流程原理和插件机制浅析(第一弹) 兜兜 393 2014年03月28日 发布 推荐 5 推荐 收藏 24 收藏,3.5k 浏览 虽然新版本0.9在多次跳票后终于发布了,在漫长的等待里始终 ...

  6. Android开发之Theme、Style探索及源码浅析

    1 背景 前段时间群里有伙伴问到了关于Android开发中Theme与Style的问题,当然,这类东西在网上随便一搜一大把模板,所以关于怎么用的问题我想这里也就不做太多的说明了,我们这里把重点放在理解 ...

  7. Linux 设备模型浅析之 uevent 篇(2)

    Linux 设备模型浅析之 uevent 篇 本文属本人原创,欢迎转载,转载请注明出处.由于个人的见识和能力有限,不可能面 面俱到,也可能存在谬误,敬请网友指出,本人的邮箱是 yzq.seen@gma ...

  8. MFC浅析(4) CObject浅析

    MFC CObject浅析 1.CObject简要声明 2.CRuntimeClass结构 3.RUNTIME_CLASS 4.DYNAMIC支持 5.DYNCREATE支持 6.SERIAL支持 C ...

  9. busybox(一)浅析

    目录 busybox(一)浅析 引入 读取inittab 创建执行脚本链表 执行脚本 小结 title: busybox(一)浅析 tag: arm date: 2018-11-13 23:02:33 ...

随机推荐

  1. C++回调:利用Sink

    Sink的本质是利用C++的封装.继承.多态的面向对象来实现,从实现角度来说,更优于函数指针回调: // cbBysink.cpp : Defines the entry point for the ...

  2. Python自动化编程-树莓派GPIO编程(二)

    树莓派我们编程一般都直接用高效的python,针对于GPIO编程,python也是有这一方面的库的,这里最有名也是最常用的就是RPI.GPIO了.这个库是专门为树莓派GPIO编程所设计的,利用它你可以 ...

  3. Python PIL 库的应用

    PIL (Python Image Library) 库是Python 语言的一个第三方库,PIL库支持图像存储.显示和处理,能够处理几乎所有格式的图片. 一.PIL库简介 1. PIL库主要有2个方 ...

  4. SVN 客户端 TortoiseSVN 的安装和使用

    关于 参考博客:TortoiseSVN新人使用指南 TortoiseSVN 是一个 Apache Subversion(SVN)客户端,实现为Windows外壳扩展.它直观且易于使用,因为它不需要Su ...

  5. [Swift]LaunchScreen.storyboard设置启动页

    设置[General]->[App Icons and Launch Images] 注意:当App不是用LaunchScreen.xib来配置启动页时,[LaunchScreen File]置 ...

  6. C++primer笔记之关联容器

    在这一章中,有以下的几点收获: 1.pair类型的使用相当频繁,如果需要定义多个相同的pair类型对象,可考虑利用typedef简化其声明: typedef pair<string, strin ...

  7. .NET手记-HttpClient解析GB2312乱码问题

    最近为App的服务器端卸了个爬虫程序,输出结果时发现出现乱码现象,尝试使用了几个方案发现效果并不太好,最后发现了一个很简单的用法. var result = await client.GetByteA ...

  8. 测试工具之Jmeter(创建一个简单测试用例)

    前面介绍了如何使用badboy录制jmeter脚本,以及如何导入脚本并进行测试 这里介绍下手动创建测试用例,主要步骤如下: 1.创建线程组 第一次打开Jmeter只有一个测试计划,右键“测试计划”选择 ...

  9. Linux驱动:内核等待队列

    在Linux中, 一个等待队列由一个"等待队列头"来管理,等待队列是双向链表结构. 应用场合:将等待同一资源的进程挂在同一个等待队列中. 数据结构 在include/linux/w ...

  10. python 多环境共存 基础

    正在学习python 使用的是3.3 但是由于种种原因吧 还得使用python2.7 所以记录一下 如何安装2个版本 假设 在windows 下面安装的python 版本 和路径 如下 python ...