2012-07-24 143 views
3

在iPad(iOS v.5.1.1)上,Safari並未根據規範保留視頻元素的readyState值。即使從視頻源readyState加載時等於零。我做了demonstration jsfiddle which continuously checks the video's readyState。一個有趣的觀察:readyState只有在點擊播放按鈕後纔會改變。ios safari上的HTML5視頻元素的readyState問題

實際上,我期望readyState在加載過程中切換到更高的數字(因爲我測試的桌面上的所有瀏覽器都是這種情況 - 包括Safari)。是否有解決方法?我在這裏弄錯了什麼?

回答

5

Apple developer documentation

注:裝載屬性,是在Safari 5.0及更高版本支持。 iOS上的Safari永遠不會預先加載。

根據Apple的說法,移動設備上的期望行爲是隻有在您主動請求資源以避免浪費帶寬或電池後纔開始加載。

關於你的問題,這意味着蘋果堅持規範。由於沒有發生預載,並且只在點擊播放按鈕後纔開始加載,所以readyState在該時間點之前爲零。

但是,video標記有特殊的事件,應該提供比readyState更多的信息。

  • onCanplay
  • onCanplaythrough
  • onProgress

再次引述Apple developer library (Using DOM Events to monitor load progress)

注:在iPad上,Safari不開始下載,直到用戶點擊海報或佔位符。目前,以這種方式開始的下載不會發送進度事件。

+0

感謝您的回答。我還沒有得到如何腳本驅動播放應該工作。一方面,如果您忽略readyState並調用.play()或無論如何訪問一些視頻屬性,您將獲得一個INVALID_STATE_ERR。另一方面,你不能等待readyState改變。 – artistoex 2012-07-28 11:34:57

+0

順便說一句,在另一個例子中,我可以看到加載頁面後的第一個視頻幀,所以必須加載一些東西。 – artistoex 2012-07-28 11:39:02

+0

您看到的框架可能是您可以分配給視頻展示內容的海報圖片。視頻中有我添加到我的答案中的特殊事件。 – 2012-07-28 11:47:06