美文网首页
微信 JSSDK 与 sea.js 的“不兼容”

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

作者: Bencalie | 来源:发表于2016-07-19 09:46 被阅读0次

我们在做一个手机端的页面,在微信和微博浏览器里使用,我们使用了 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);
});

至此,问题得到解决。

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

相关文章

网友评论

      本文标题:微信 JSSDK 与 sea.js 的“不兼容”

      本文链接:https://www.haomeiwen.com/subject/mismjttx.html