浅析"WeixinJSBridge is not defined"

Fundebug并没有使用微信 JS-SDK,然而却收到了WeixinJSBridge is not defined的报错:

浅析"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、金山软件、百姓网等众多知名用户的认可。欢迎免费试用!

浅析"WeixinJSBridge is not defined"

版权声明

转载时请注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/02/18/weixinjsbridge-is-not-defined/

转载于:https://blog.51cto.com/13957060/2317891

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WeixinJSBridge is not defined是一个报错提示,意味着在微信支付过程中,WeixinJSBridge对象未被定义。这个问题可能有多种原因。 一种可能是在微信内置浏览器中加载WeixinJSBridge的时间不够,导致该对象未被正确定义。在微信内置浏览器中,WeixinJSBridge的加载需要一定的时间。你可以在代码中添加一些延时等待的逻辑,确保WeixinJSBridge对象在使用之前已经加载完成。 另一种可能是你没有正确引入微信的JS-SDK或者接口。请确保你已经正确引入微信的JS-SDK,并且接口返回的预支付id也是正确的。你可以参考微信支付的官方文档,确保你的代码与文档中的示例代码一致。 另外,你还可以尝试使用JS-SDK文档中的支付代码,而不是公众号支付文档中的代码。这样也可以避免一些潜在的问题。 总结起来,解决WeixinJSBridge is not defined的问题,你可以尝试以下几个方法: 1. 添加适当的延时等待逻辑,确保WeixinJSBridge对象在使用之前已经加载完成。 2. 确保你已经正确引入微信的JS-SDK,并且接口返回的预支付id也是正确的。 3. 参考微信的JS-SDK文档,尝试使用其中的支付代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [微信支付 WeixinJSBridge is not defined 报错](https://blog.csdn.net/huwei2003/article/details/79112893)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值