热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

浅析"WeixinJSBridgeisnotdefined"

Fundebug并没有使用微信JS-SDK,然而却收到了WeixinJSBridgeisnotdefined的报错:我们的用户也收到了类似的错误报警,并且很多开发者都遇

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/


推荐阅读
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • React 小白初入门
    推荐学习:React官方文档:https:react.docschina.orgReact菜鸟教程:https:www.runoob.c ... [详细]
  • JavaScript和Python是用于构建各种应用程序的两种有影响力的编程语言。尽管JavaScript多年来一直是占主导地位的编程语言,但Python的迅猛发展有 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 随着前端技术的发展,越来越多的开发者开始使用react、vue等web框架,但很少有人深入理解这些框架的源码。然而,这些框架底层都是由原生的javascript构建而成。对于初学前端的人来说,可能会认为javascript很容易上手,但实际上只是因为它被高度封装了。与能够使用封装类的人相比,能够理解框架原理的人则处于另一个层面。本文将深入剖析jquery源码,探寻框架底层的原理,帮助读者更好地理解web框架的运行机制。 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 前言:原本纠结于Web模板,选了Handlebars。后来发现页面都是弱逻辑的,不支持复杂逻辑表达式。几乎要放弃之际,想起了Javascript中ev ... [详细]
  • 前言:原本纠结于Web 模板,选了Handlebars。后来发现页面都是弱逻辑的,不支持复杂逻辑表达式。几乎要放弃之际,想起了Javascript中eval函数。虽然eval函 ... [详细]
  • 技术周报·2021-05-07-小编推荐向现代Javascript转型原文标题:Publish,ship,andinstallmodernJavaScriptforfaste ... [详细]
  • OrbitDBPeer 2 Peer Database using CRDTs
    2019独角兽企业重金招聘Python工程师标准Apeer-to-peerdatabaseforthedecentralizedwebOrbitDBisaserverless ... [详细]
  • Itwasworkingcorrectly,butyesterdayitstartedgiving401.IhavetriedwithGooglecontactsAPI ... [详细]
  • 前端简史之纵横:Node东出
    引💡Ajax的出现,带来了jQuery时代,而jQuery时代也伴随着Node风暴淡淡退出了历史舞台。如果说Ajax给前端带来了从网页静 ... [详细]
  • html css在线便宜,在线HTML、CSS和JS工具汇总
    本文提供了在线HTML、CSS和JS工具汇总,它们都是直接在浏览器上可以使用的在线工具,基本上都是比较简单操作的,只适合简单的调试工作&# ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 表单提交前的最后验证:通常在表单提交前,我们必须确认用户是否都把必须填选的做了,如果没有,就不能被提交到服务器,这里我们用到表单的formname.submit()看演示,其实这个对于我们修炼道 ... [详细]
author-avatar
嗳__霞骸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有