今天同事測試活動的時候,背景音效(多個)蘋果機無法發出聲音,幾個手機都試過,沒什么用。不過安卓機上倒是沒這個問題,正常。
最開始以為是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>