2010-06-03 127 views

回答

8

在我看來,這應該是工作,我找不到任何文件說它不應該工作(無論是從W3C或像蘋果的供應商),但將音頻文件作爲資源緩存清單似乎不適用於iPad至少在iPhone上使用iPhone &。

當應用程序處於在線狀態時,聲音播放正常(儘管它每次都會重新載入它們並且不緩存它們),並且它不會抱怨在離線模式下不存在的資源您忘記了包含JavaScript,CSS,HTML或圖片資源)。

而不是抱怨(或加載);如果該元素有一個控件,該控件被替換爲「無法播放音頻文件」的框。或者,如果它是一個沒有控件的元素(即通過JavaScript訪問所有.play()),那麼它就不會播放(它不會導致任何錯誤,只是沒有聲音,否則JavaScript會繼續執行一般)。

我用相當小的文件(< 20k)測試了這個文件,結果是一樣的,所以它看起來沒有大小相關,僅僅是一個拒絕拷貝。 我不確定您是否可以將聲音編碼爲頁面中的資源(例如使用base64進行編碼),但是我會調查該選項 - 我懷疑這是可行的。 我嘗試將音頻數據編碼爲數據URI字符串,甚至試圖隨時生成音頻 - 在桌面上的Safari中均可正常工作,但不適用於iPhone/iPad操作系統(至少在版本3.x上 - 我沒有試過在iOS 4上,但它不會出現一個星期,即使他們確實修復它也不會在iPad上使用幾個月。

我猜想拒絕在iOS中緩存聲音文件是一個實現錯誤或意圖有限的功能。這無疑是令人討厭的,也是很多用例的一個阻礙。

我不確定其他HTML5客戶端會發生什麼,我很想知道(特別是在Andriod上)。谷歌對音頻的支持也不是很好,所以它可能會受到同樣的限制。

+0

僅供參考JavaScript .play()在控制少的元素上不起作用,因爲它在iphone/ipad的safari中是不允許的(必須有用戶輸入)。至於「無法播放音頻文件」,我發現它發生是因爲該文件不受支持。出於某種原因,這發生在我身上的某些mp3文件。 – 2010-09-07 06:13:57

+0

@jd謝謝,但澄清,我看到的是,JavaScript實際上工作正常,但只有你有(快速)連接(如果它很慢,它是間歇性的,因爲它不斷重新獲取聲音文件)。緩存清單僅適用於離線HTML5應用程序中的聲音文件 - 連接JavaScript調用可以工作(並且所有聲音文件都可以工作)。這似乎與文件大小無關。 – 2010-09-07 15:27:18

+1

感謝您的寫下。我剛剛測試過它,它與你所說的一致。非常糟糕。 – airportyh 2011-03-06 04:12:10

1

你總是可以開發一個可與客戶端SQLlite DB

+1

每個應用程序的存儲沒有5兆的限制嗎? – 2010-06-21 03:05:00

0

我看不出有任何理由,你爲什麼不能在cache manifest指定音頻文件的解碼/編碼層。

+0

似乎可能存在問題,請參閱此處:http://stackoverflow.com/questions/1612116/html5-local-storage-of-audio-element-source-is-it-possible – UpTheCreek 2011-03-02 09:02:57