微信网页摇动手机播放音频-IOS无法播放的bug

作者: 道友试试重启 | 来源:发表于2017-01-04 15:24 被阅读5103次

    前段时间做了一个摇奖功能,监测摇动并播放一个“唰 唰”的声音,功能都已实现;突然被告知在安卓上依旧正常,但是在IOS上没有声音了。

按照程序员的思维,我的第一个反应是:

“你是不是静音了?” —— " 并不是"

“那是谁改我代码了?”—— "..."

好吧,查看服务器,JS文件的最后修改时间是两个月前。那就是说没人改动。

(急于寻找答案的同学可以直接翻到最后—_—)开始排查原因,了解到:

在safri on ios里面明确指出等待用户的交互动作后才能播放media,也就是说如果你没有得到用户的action就播放的话就会被safri拦截

也就是说,音频无法通过代码触发音频的播放,必须通过用户点击等交互动作来触发?

(还是奇怪我之前怎么没问题?因为微信或者IOS版本更新?)

先贴我的代码:

HTML :
<audio id="shakeMusic" src="../sprize/sound/shake.mp3" class="media-audio" preload>您的浏览器不支持音频播放标签。</audio>

JS :
var shakeMusic = document.getElementById("shakeMusic");

window.addEventListener('shake', shakeEventDidOccur, false);

function shakeEventDidOccur(obj) {
  shakeMusic.play();
}

首先,测试上面提过的 —— “ 等待用户的交互动作后才能播放media。”

新建一个元素,并用点击事件触发shakeMusic.play(),如:

<div id="playShake" onclick="shakeMusic.play();"></div>

测试发现播放正常,也就是说:在IOS里并没有把自定义事件shake当成交互动作...

点击后,再摇动,发现摇动也会有声音!那就是说:在点击之前audio是没有被加载的

那么在获得shakeMusic后,加载一下音频。如:

var shakeMusic = document.getElementById("shakeMusic");
// 微信提供的事件,微信浏览器内部初始化完成后
document.addEventListener("WeixinJSBridgeReady", function () {
  shakeMusic.load();
}, false);

测试OK,Bug修复完毕!!!

贴一下完整代码:

HTML :

<audio id="shakeMusic" src="../sprize/sound/shake.mp3" class="media-audio" preload>您的浏览器不支持音频播放标签。</audio>

JS :

var shakeMusic = document.getElementById("shakeMusic");

// 微信提供的事件,微信浏览器内部初始化完成后
document.addEventListener("WeixinJSBridgeReady", function () {
  shakeMusic.load();
}, false);

// 监听手机摇动
window.addEventListener('shake', shakeEventDidOccur, false);

function shakeEventDidOccur(obj) {
  shakeMusic.play();
}

相关文章

  • 微信网页摇动手机播放音频-IOS无法播放的bug

    前段时间做了一个摇奖功能,监测摇动并播放一个“唰 唰”的声音,功能都已实现;突然被告知在安卓上依旧正常,但是在I...

  • android:摇一摇的实现

    一、需求 实现类似微信等的摇一摇效果摇动时 振动手机、播放音频、弹出dialog提示摇动时不需要微信的动画效果 二...

  • 微信小程序开发的坑

    最近在做微信小程序,知识付费类的,需要播放背景音频。微信版本6.6.5 iOS上播放没有问题,Android上播放...

  • iOS 9音频应用播放音频之播放控制暂停停止前进后退的设置

    iOS 9音频应用播放音频之播放控制暂停停止前进后退的设置ios9音频应用播放控制在“iOS 9音频应用播放音频之...

  • iOS音频播放的几种方式

    title : iOS音频播放的几种方式category : IOS iOS音频播放的几种方式 标签(空格分隔)...

  • 小程序的音频播放

    微信小程序的音频播放主要分1.背景音频播放与2.普通音频播放两种。以下是wepy项目中的具体写法 1背景音频播放 ...

  • 工作总结

    主要是古诗的新功能实现与测试修改 问题 IOS的长音频播放前有一个不能避免的延时(凯叔也有) 微信的音频自动播放必...

  • iOS音频

    iOS中支持的音频播放类型播放音效System Sound Service播放本地音频AVFoundataion播...

  • iOS音频工具箱

    iOS音频工具箱 我们都知道,微信语音播放下可以切换听筒和扬声器,那么它是怎么实现的呢? 微信语音播放之切换听筒和...

  • 微信内音频无法播放

    在wx.ready()回调中执行play方法,音频才可以播放,若不需要自动播放,在调用play方法之后再调用pau...

网友评论

  • 西部荒野的麦田:ios11 表示无效
    程序员米粉:那你怎么解决呢?
  • 西部荒野的麦田:那如果不在微信里呢?
  • 82709210c359:谢谢楼主 播放多个音频问题解决了
    道友试试重启:@咻咻_e449 同一个地方播放不同类型的视频,mp3可以wav的不行吗?
    02eca4c37543:@皮皮皮俊 我使用audio标签在PC和安卓的任何游览器中都可以播放WAV文件,但是在IOS中用任何游览器都不可以播放,MP3的可以播放,是我JS写的有问题,还是IOS不兼容?
    道友试试重启:很高兴能帮到你:smile:
  • 79765780507f:妹子头像真不错
  • zw900808:<div class="audio" style="width: 0; height: 0px; overflow: hidden;">
    <audio id='ado-shake' src='/resources/plugins/shake/shake.mp3' preload style="width: 0; height: 0px;"></audio>
    <audio id='ado-shaked' src='/resources/plugins/shake/shaked.mp3' preload style="width: 0; height: 0px;"></audio>
    </div>
  • zw900808:window.onload = function() {
    var adoShake = document.getElementById('ado-shake');
    var adoShaked = document.getElementById('ado-shaked');
    var btnShake = document.getElementById('btn-start');

    document.addEventListener("WeixinJSBridgeReady", function() {
    adoShake.load();
    adoShaked.load();
    }, false);

    btnShake.addEventListener('click', function(e) {
    $('.shake').addClass('shaking');
    adoShake.play();
    });

    adoShake.addEventListener('ended', function() {
    $('.shake').removeClass('shaking');
    adoShaked.play();
    }, false);

    var myShakeEvent = new Shake({
    threshold : 15
    });
    myShakeEvent.start();
    window.addEventListener('shake', shakeEventDidOccur, false);

    function shakeEventDidOccur() {
    $('.shake').addClass('shaking');
    adoShake.play();
    }
    };
  • zw900808:你好,一个音频是ok的,但是两个音频就有问题了,第二个音频还是没有声音
    zw900808:@Leo_大俊 你好,謝謝你的回覆,現在可以了,我也奇怪爲什麼又可以了,會不會是ios手機的緩存原因
    道友试试重启:因为我的这贴代码,开始也是两个音频,只是写进文章后便于理解,我删减了一个
    道友试试重启:你好,调换音频位置试一下,是否还是第二个音频没有声音

本文标题:微信网页摇动手机播放音频-IOS无法播放的bug

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