??? 前段時間做了一個搖獎功能,監(jiān)測搖動并播放一個“唰 唰”的聲音氏身,功能都已實現(xiàn)巍棱;突然被告知在安卓上依舊正常,但是在IOS上沒有聲音了蛋欣。
按照程序員的思維航徙,我的第一個反應是:
“你是不是靜音了?” —— " 并不是"
“那是誰改我代碼了陷虎?”—— "..."
好吧到踏,查看服務器,JS文件的最后修改時間是兩個月前尚猿。那就是說沒人改動窝稿。
(急于尋找答案的同學可以直接翻到最后—_—)開始排查原因,了解到:
在safri on ios里面明確指出等待用戶的交互動作后才能播放media凿掂,也就是說如果你沒有得到用戶的action就播放的話就會被safri攔截
也就是說伴榔,音頻無法通過代碼觸發(fā)音頻的播放,必須通過用戶點擊等交互動作來觸發(fā)庄萎?
(還是奇怪我之前怎么沒問題踪少?因為微信或者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∪碳瘢”
新建一個元素集漾,并用點擊事件觸發(fā)shakeMusic.play(),如:
<div id="playShake" onclick="shakeMusic.play();"></div>
測試發(fā)現(xiàn)播放正常砸脊,也就是說:在IOS里并沒有把自定義事件shake當成交互動作...
點擊后具篇,再搖動,發(fā)現(xiàn)搖動也會有聲音脓规!那就是說:在點擊之前audio是沒有被加載的栽连?
那么在獲得shakeMusic后险领,加載一下音頻侨舆。如:
var shakeMusic = document.getElementById("shakeMusic");
// 微信提供的事件,微信瀏覽器內(nèi)部初始化完成后
document.addEventListener("WeixinJSBridgeReady", function () {
? shakeMusic.load();
}, false);
測試OK绢陌,Bug修復完畢0は隆!脐湾!
貼一下完整代碼:
HTML :
<audio id="shakeMusic" src="../sprize/sound/shake.mp3" class="media-audio" preload>您的瀏覽器不支持音頻播放標簽臭笆。</audio>
JS :
var shakeMusic = document.getElementById("shakeMusic");
// 微信提供的事件,微信瀏覽器內(nèi)部初始化完成后
document.addEventListener("WeixinJSBridgeReady", function () {
? shakeMusic.load();
}, false);// 監(jiān)聽手機搖動
window.addEventListener('shake', shakeEventDidOccur, false);function shakeEventDidOccur(obj) {
? shakeMusic.play();
}