2011-11-18 230 views
15

我正在爲有客戶端聊天的網站工作,但是,我們遇到了iPad(iOS 5)中音頻的問題。在iPad上播放音頻

目標實際上是支持IE7的iPad首選。

我已經試過這些方法:

HTML5

<audio id="notification" preload="auto"> 
    <source src="audio/notification.ogg" type="audio/ogg" /> 
    <source src="audio/notification.mp3" type="audio/mpeg" /> 
</audio> 

隨着一些JavaScript

var el = document.getElementById('notification'); 
el.play(); 

我偷了一些JavaScript函數某處這實際上在一個功能中是兩種不同的方法。請注意腳本在一個子目錄中,所以路徑是正確的。

function notify() { 
    var url = '../audio/notification.mp3'; 
    var a = document.createElement('audio'); 

    if(!!(a.canPlayType && a.canPlayType('audio/mpeg').replace(/no/, ''))) { 
     var sound = new Audio(url); 
     sound.load(); 
     sound.play(); 
    } else { 
     $('#notification').remove(); 
     var sound = $('<embed id="notification" type="audio/mpeg" src="'+url+'" loop="false" hidden="true" autostart="true" />'); 
     $(body).append(sound); 
    } 
} 

這兩種方法似乎都不起作用。難道我做錯了什麼?

回答

25

那麼,答案是顯而易見的。

很多時間支出做研究後等,我發現Safari瀏覽器的官方文檔中an article說:

在Safari瀏覽器在iOS(所有設備,包括iPad的),其中用戶可在蜂窩網絡上並按每個數據單元收費,預先加載和自動播放被禁用。直到用戶啓動它纔會加載數據。這意味着,除非用戶操作觸發play()或load()方法,否則JavaScript play()和load()方法在用戶啓動播放之前也處於非活動狀態。換句話說,用戶啓動的播放按鈕可以工作,但onLoad =「play()」事件不會。

因此,基本上,如果用戶一開始沒有觸發,就無法啓動聲音。作爲解決方案,我創建了一個默認關閉的靜音按鈕,因此您必須單擊播放通知聲音的按鈕。之後,我可以使用Javascript在沒有用戶交互的情況下播放聲音。

謝謝Safari瀏覽器爲這個偉大的未來。非常感謝。

+1

有趣的東西! –

+4

Gah,加入Apple後,用戶操作正在加載網頁,因此需要*兩個用戶操作(加載一個頁面,然後執行其他操作)。嘗試觸發本機鍵盤時出現同樣的問題。 –

+0

@Tim S:你是說,對於給定的網頁:一旦用戶加載頁面,然後點擊播放按鈕,你可以隨時播放音頻,只要你喜歡在該頁面上?說,迴應一個鼠標懸停事件? –

-1

嘗試將MP3作爲第一個來源而不是第二個來源。 iPad曾經有一個問題,無論它是什麼(它現在可能已經被修復 - 但它是值得一試的),它始終扮演着第一個來源。

也嘗試將type更改爲audio/mp3

+0

不幸的是,兩者都沒有工作。儘管感謝您的回答。 –

+0

奇數。你是否證實它可以在桌面瀏覽器上運行?所以你可以確保音頻文件的路徑是正確的? –

+1

我可以肯定,它確實在桌面上工作。另外,如果iPad實際上是這樣的聲音,哈哈! –

4

如果沒有用戶點擊之前啓動它,Apple iPad不允許播放聲音。

解決方案:添加播放/暫停按鈕。

App.toggle_audio = function(elem) { 
    var icon = elem.find("i"); 
    var playing = _.include(icon.attr('class').split(" "), "icon-pause") 
    if (playing) { 
    elem.html("<i class='icon-play'></i> " + App.translate_play_audio); 
    App.play_audio_toggle = false; 
    } else { 
    App.audio_file.load(); 
    elem.html("<i class='icon-pause'></i> " + App.translate_pause_audio); 
    App.play_audio_toggle = true; 
    } 
} 

一旦用戶點擊按鈕,一旦加載了音頻。然後你可以通過Javascript播放它。

if (App.play_audio_toggle) { 
    App.audio_file.play(); 
    } 
+7

我偶然發現了這個問題,並找到了解決這個問題的方法。然後決定發佈我用來幫助他人的代碼。 – Hendrik

6

與iOS 6的一個onload在發佈iPad的音頻播放仍然不支持爲iPad。

對於使用iOS 6的iPhone,音頻只能在HTML網站的onLoad中播放,如果耳機插入iPhone的音頻插孔。

+1

OMG認真,LOL。 – Aaron