微信jssdk接口调用能否在ready函数外?

需求是根据用户的输入,动态绑定分享朋友事件,使得生成link属性里的一个参数有不同的值。
我看到jssdk官方文档上这样说:

wx.ready(function(){

    // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});

对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。可是这里我试过没有用,这些分享接口一旦放到ready函数外面就不起作用了!这是为什么?是不是文档有误?求帮助~
一下是我的代码:

<script>

       wx.config({
               debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
               appId: "{$signPackage['appId']}",
               timestamp: "{$signPackage['timestamp']}", 
               nonceStr: "{$signPackage['nonceStr']}", 
               signature: "{$signPackage['signature']}",
               jsApiList: [ 
               'onMenuShareAppMessage',
               'onMenuShareTimeline',
             ] 
       });
   function test(var){
         //分享朋友
        wx.onMenuShareAppMessage({
            title: 'title',
            desc: 'desc',
            link: "{php echo $this->createMobileUrl('member/share_credit', array('type'=>'share','fromuser'=>$openid))}"+'&share_id='+var,
            imgUrl: "{php echo tomedia($share_images)}",
            trigger: function (res) {
            },
            success: function (res) {
                alert('分享成功!');
            },
            cancel: function (res) {
                alert('分享是一种美德哦!');
            },
            fail: function (res) {
                alert(JSON.stringify(res));
            }
        });
    }
  </script>
<button onclick="test({$var});">测试</button>
阅读 9.2k
1 个回答

原则上是可以,我测试过,不过不完整。根据我的经验,为保证测试通过需要遵循这样一些条件。

  1. 在所有微信接口调用前必须保证 jweixin-1.0.0.js 文件先加载完成

  2. 完成上一步的基础上,必须保证 wx.config 已经获取了正确的初始化参数

  3. 完成上一步的基础上,即可在 wx.ready 方法外调用允许的接口方法

如果在 wx.config 尚未进行初始化结束前就存在调用接口的操作,则操作失败的可能性是存在的。因此这个初始化操作应当置于所有接口调用方法之前,不要采用异步的方法给 wx.config 初始化,这可能导致它还没有完成初始化,就会执行后续接口调用,而这种情况极可能是不能触发接口调用的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题