微信开发

2018-09-03  本文已影响0人  隔壁老王z

1、微信JSSDKAPI都有一个大问题, 就是如果调用时间间隔过短, 就非常可能产生无效调用. 无效调用的意思是, 虽然你调用了某个API, 但是相当于没调用,它不会触发success, failcomplete中的任何一个callback!
2、打比方说, 你做一个"按下录音, 抬手停止录音"的功能, 如果用户点击了一下录音按钮, 相当于快速地startRecord然后stopRecord, 那么stopRecord是极有可能是无效的, 不会执行任何callback.
3、然而问题还不止这个, 微信JSSDK的调用是异步的. 举例来说就是, 你调用startRecord的时间, 和startRecordsuccesscallback被执行的时间可能间隔了若干毫秒甚至秒. 这意味着, 用户点击按钮可能会造成: 虽然是先调用startRecord再调用stopRecord, 但是可能stopRecord先于startRecord调用成功!
4、第一次调用startRecord会弹出提示“是否允许获取录音权限”,而此时已经检测不到touchend事件,因此录音动画会一直执行,解决:在mounted(用的vue)的时候

def.wx.ready(() => {
      var allow_record = localStorage.getItem("allow_record");
      if (!allow_record || allow_record !== true) {
        def.wx.startRecord({
          success: function() {
            localStorage.setItem("allow_record", true);
            def.wx.stopRecord();
          },
          fail: function() {
            // alert("失败");
          },
          cancel: function() {
            // alert("取消");
          }
        });
      }
    });
 //一般情况下,这样就可以自动播放了,但是一些奇葩iPhone机不可以
 document.getElementById('car_audio').play();
//必须在微信Weixin JSAPI的WeixinJSBridgeReady才能生效
document.addEventListener("WeixinJSBridgeReady", function () {
    document.getElementById('audio').play();
    document.getElementById('video').play();
}, false); 
上一篇下一篇

猜你喜欢

热点阅读