【问题标题】:readyState issue with HTML5 video elements on ios safariios Safari 上 HTML5 视频元素的 readyState 问题
【发布时间】:2012-07-24 15:13:20
【问题描述】:

似乎在 iPad (iOS v. 5.1.1) 上,Safari 不会根据规范保留视频元素的 readyState 值。即使从视频源加载时readyState 也等于零。

我创建了一个demonstration jsfiddle which continuously checks the video's readyState。一个有趣的观察:readyState 只有在点击播放按钮后才会改变。

实际上,我预计readyState 在加载过程中会切换到更高的数字(因为我测试过的桌面上的所有浏览器都是这种情况——包括 Safari。)有解决方法吗?我这里有什么问题吗?

【问题讨论】:

    标签: ios html safari


    【解决方案1】:

    来自Apple developer documentation

    注意:Safari 5.0 及更高版本支持 preload 属性。 iOS 上的 Safari 从不预加载。

    根据 Apple 的说法,移动设备上的期望行为是仅在您主动请求资源后才开始加载,以免浪费带宽或电池。

    关于您的问题,这意味着 Apple 遵守规范。由于不会发生预加载,并且仅在您单击播放按钮后才开始加载,因此readyState 在该时间点之前为零。

    但是,video 标签有一些特殊事件,应该比readyState 提供更多信息。

    • onCanplay
    • onCanplaythrough
    • onProgress

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

    注意:在 iPad 上,Safari 在用户单击海报或占位符之前不会开始下载。目前,以这种方式开始的下载不会发出进度事件。

    【讨论】:

    • 感谢您的回答。我仍然不明白脚本驱动的播放应该如何工作。一方面,如果您忽略 readyState 并调用 .play() 或访问某些视频属性,您将获得 INVALID_STATE_ERR。另一方面,你不能等待 readyState 改变。
    • 顺便说一句,在另一个例子中,我可以看到加载页面后的第一个视频帧,所以一定是加载了一些东西。
    • 您看到的帧可能是海报图像,您可以将其分配给视频以显示某些内容。该视频包含我在回答中添加的特殊事件。
    • 好吧,经过一番研究,我发现 safari 确实违反了规范:根据 HTML 5 规范,如果“readyState 新增加到 HAVE_FUTURE_DATA 或更高”,则会触发 onCanPlay。
    • 但是你不是说点击播放后readyState会增加。 canPlay 不仅会在您单击播放以加载某些内容后触发吗?但这仍然很有趣,我也想进一步调查。您介意分享您在问题中提到的部分的链接吗?
    猜你喜欢
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2013-02-12
    相关资源
    最近更新 更多