今天同事測試活動的時候,背景音效(多個)蘋果機無法發出聲音,幾個手機都試過,沒什么用。不過安卓機上倒是沒這個問題,正常。
最開始以為是js沖突問題,將頁面上所有的東西進行加處理(清空,一個個加進來),為了測試方便,在頁面上加了個按鈕,進行點擊播放。
加到最后,都沒有什么問題。
突然想到之前百度查找答案的一個說法:需要觸摸觸發。反正大概就是必須是人為去觸發,而不是我們js進行調用click事件。
如此,我們就在原有頁面上增加了一個按鈕,當點擊時,聲音出來了。
到這一步,聲音播放問題解決。
下一步就是解決初始的時候,點擊時放出的聲音。至於原先的按鈕操作就由頁面本身的一個開始按鈕進行,幸虧頁面最開始還有個開始按鈕,要不然,這觸發問題還得繼續想(最外面加個蒙版,然后用戶一點擊,就觸發,然后去除蒙版,或者將點擊事件至於其他會點擊的按鈕處)。
audio有個屬性是volume,用來控制音量的,1.0是最高的,0.0是靜音。只是這個值,不能<audio volume="0.0" id="test">這么寫。而是需要使用js進行設置document.getElementById("test").volume=0.0才行。而js初始設置,對於蘋果機來說,最開始也是無效的,安卓倒是沒事。
既然不能volume着手,只能換一個方式了。
突然想到,如果開始的時候play(),馬上就parse(),我們人應該是捕捉不到的。就讓同事去試了。
結果是成功。
所以暫時解決方式就是,點擊開始按鈕的時候,立馬調用幾個audio的play()方法,然后馬上pause()。
還有個其他辦法,是針對微信的,在ready的時候,就進行調起。
<script type="text/javascript" src="js/jquery-1-6.js"></script>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script>
function autoPlayAudio1() {
wx.ready(function() {
document.getElementById('audio').play();
});
wx.config({
// 配置信息, 即使不正確也能使用 wx.ready
debug: false,
appId: '',
timestamp:1,
nonceStr: '',
signature: '',
jsApiList: []
});
}
autoPlayAudio1();
// 方法2: "野生"方法, 借用原來老的 WeixinJSBridge
function autoPlayAudio2() {
window.onload = function() {
// alert(typeof WeixinJSBridge);
WeixinJSBridge.invoke('getNetworkType', {}, function(e) {
// 在這里拿到 e.err_msg, 這里面就包含了所有的網絡類型
document.getElementById('audio').play();
});
};
}
function playbox(){
var audio=document.getElementById("audio");
if(audio!==null){
//檢測播放是否已暫停.audio.paused 在播放器播放時返回false.
//alert(audio.paused);
if(audio.paused) {
audio.play();//audio.play();// 這個就是播放
}else{
audio.pause();// 這個就是暫停
}
}
}
</script>
