微信 JSSDK 与 sea.js 的“不兼容”

我们在做一个手机端的页面,在微信和微博浏览器里使用,我们使用了 sea.js 进行前端模块化管理。页面就一个种子文件,根据配置去加载不同的静态资源(模板、css、js),微信 JSSDK 是异步载入的。

一开始的做法,习惯性地使用了 jQuery 的 $.getScript() 来异步加载 http://res.wx.qq.com/open/js/jweixin-1.0.0.js ,结果发现 JS 加载成功以后,window.wx 这个对象,居然是 undefined。

初步怀疑是微信 JSSDK 不支持异步加载,直接通过 <script> 标签放页面上 sea.js 之后,居然也是 undefined。

将微信 JSSDK 挪到 sea.js 之前,就好了,去格式化了一下 jwexin-1.0.0.js 源码之后,才发现,如果有了 define() 这个全局方法,微信 JSSDK 是当做 require() 的结果返回,不再生成 window.wx 这个对象。

于是改成了 seajs.use() 来引用,代码如下:

seajs.use('http://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(weixinSDK){
    wx = weixinSDK;
    var info = {
        debug: false,
        jsApiList: ["chooseImage", "uploadImage", "onMenuShareTimeline", "onMenuShareAppMessage"]
    };
    // 我的配置信息,是从 opts.jssdk 参数里获得的
    for(var key in opts.jssdk){
        if(key != "url"){
            info[key] = opts.jssdk[key];
        }
    }
    wx.ready(function(){
        // 开始调用微信 JSSDK 的 api
    });
    wx.error(function(res){
        // alert( JSON.stringify( res ) );
    });
    wx.config(info);
});

至此,问题得到解决。

微博的轻应用也存在此类问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 给提问的开发者的建议:提问之前先查询 文档、通过社区右上角搜索搜索已经存在的问题。 写一个简明扼要的标题,并且...
    极乐叔阅读 14,096评论 0 3
  • 基础问题 = 和 == 和 === 的区别?= : 用于赋值== : 用于判断=== : 用于判断,必须类型和值同...
    雪落丶阅读 989评论 0 1
  • HTML5面试题总结1.基础问题 = 和 == 和 === 的区别?= : 用于赋值 == : 用于判断 === ...
    LorenaLu阅读 1,247评论 0 4
  • 1 春节前,桃子收到了荷叶的微信,说是在桃子家邻村。桃子看到了这条微信但是没有回复,因为她想来想去都挺尴尬。桃子几...
    蘑菇仙子阅读 619评论 0 0
  • 1:推迟满足感 换言之:先满足自己做完的那些简单的事情,可以有一种错觉,哇!突然间,我完成了一大半的任务了,只剩下...
    郎冉冉阅读 158评论 0 0