美文网首页
微信 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