uni-app H5调用微信JS-SDK报错主因是运行环境非微信内置浏览器、URL签名不一致或wx对象未ready;需真机扫码访问、域名备案、动态加载后等待config success回调再调用API。

uni-app H5 端调用微信 JS-SDK 报错,90% 是环境没对、加载时机错了、或 URL 签名不一致——不是代码写错了,是根本没跑在微信里,或者跑在微信里但 wx 对象还没 ready。
为什么 wx 是 undefined 或 config:fail invalid url domain
微信 JS-SDK 只在微信内置浏览器(即用户用微信「扫一扫」或从公众号菜单打开)中生效,其他任何环境(Chrome、Safari、微信开发者工具、甚至微信内「用浏览器打开」)都不行。报这个错,第一件事不是查签名,而是确认:navigator.userAgent 里有没有 MicroMessenger,且 typeof wx === 'undefined' 是否为 false。
- 开发阶段必须用真机微信扫码访问,
localhost或127.0.0.1永远不会成功 - 域名必须已在公众号后台「JS接口安全域名」中完整填写(仅支持 https + 80/443 端口)
- 哪怕只差一个
/或多一个#,签名都会失败——后端验签用的 URL 必须和前端location.href.split('#')[0]完全一致
动态加载 jweixin-1.6.0.js 时常见错误
不能在 main.js 里 import 或 require,也不能用 document.write;必须手动创建 script 标签、监听 load 事件,并确保只加载一次。
- 推荐封装一个
loadWxSdk函数,在用户点击按钮(如分享、跳小程序)时才触发加载 - 加载完成后要等
wx.config回调success,才能调wx.ready里的逻辑,否则wx.miniProgram仍是undefined - 重复加载会导致
config:ok触发多次,部分安卓机型会直接拒绝后续调用
调用 updateAppMessageShareData 无反应
这个接口被微信严格限制:必须在用户真实点击事件回调中同步调用,不能延迟、不能异步、不能放在 mounted / onLoad / setTimeout 里。
- 写法必须是:
<button @click="handleShare">分享</button>,且handleShare内直接调wx.updateAppMessageShareData({...}) - 如果分享数据依赖异步请求(比如拉取标题/图片),得把整个请求 + 调用链包在点击事件里,不能先请求再等用户点第二次
- iOS 微信 8.0.30+ 对
imageUrl域名校验更严,必须和当前页面同域或已配置为业务域名
如何判断是否真的「能用」而不是「看起来能用」
别信控制台有没有 wx,要看三件事同时成立:
-
/(MicroMessenger|WeChat)/.test(navigator.userAgent)返回true -
typeof wx !== 'undefined'且wx.config已执行并收到config:ok -
wx.miniProgram && typeof wx.miniProgram.navigateTo === 'function'(跳小程序场景)或wx.updateAppMessageShareData存在且可调用
缺一不可。很多问题卡在第二步——签名通过了,但没等 ready 就调分享,结果静默失败,连错误都不抛。



















