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. json、txt、xlsx

    json:   json异于pickle,无乱码,各语言都支持,但Python各对象只直接接收int,str,(),[],{}.读入txt时只接受str,int变为str(int),()[]{}被js ...

  2. js-实时获取键值码

    <script> document.onkeydown=function(event){ console.log(event.keyCode)    //在控制台打印 } </scr ...

  3. NET Core微服务之路:实战SkyWalking+Exceptionless体验生产环境下的追踪系统

    前言 当一个APM或一个日志中心实际部署在生产环境中时,是有点力不从心的. 比如如下场景分析的问题: 从APM上说,知道某个节点出现异常,或延迟过过高,却不能及时知道日志反馈情况,总不可能去相应的节点 ...

  4. Mac 视频录制然后转 gif

    https://gist.github.com/dergachev/4627207 用 ScreenShot 或 Quicktime Player 录制视频, 保存位 in.mov ffmpeg -i ...

  5. TextView展示富文本时emoj或图片和文字不对齐的解决方案

    在项目中,回复框.聊天界面的显示往往会有emoj或者图片,但是一个比较头疼的问题是,会出现emoj表情或者图片和文字的位置不对齐,总是有偏移,这样很影响用户体验的.下面会总结一下如何解决这个问题. 本 ...

  6. LabVIEW(十一):条件结构的巧用

    一.LabVIEW中条件结构使用起来并不是那么简便,主要体现在两点: 1.由隧道的产生引起的一些问题.(当箭头停留在隧道处时不显示为“自动索引隧道”,所以此隧道非彼隧道) 2.由多层结构判断引起的不易 ...

  7. 数组的三种声明方式总结、多维数组的遍历、Arrays类的常用方法总结

    1. 数组的三种声明方式 public class WhatEver { public static void main(String[] args) { //第一种 例: String[] test ...

  8. iOSAPP开发项目搭建

    架构图: 架构原则:易读性.易维护性.易扩展性. 一.思考 做好一件事,花在思考上的时间应该多于执行. 首先根据产品需求和设计图,脑中先建立一个产品架构: 1. 产品的定位是什么. 社交?媒体?游戏? ...

  9. 用synchronized同时修饰父类和子类,线程是安全的。即对象锁可重入

    public class SyncDubbo { static class Main { public int i = 10; public synchronized void operationSu ...

  10. 在Kubernetes中部署GlusterFS+Heketi

    目录 简介 Gluster-Kubernetes 部署 环境准备 下载相关文件 部署glusterfs 部署heketi server端 配置heketi client 简介 在上一篇<独立部署 ...