HTML5 视频加载数据事件在 IOS Safari 中不起作用

Posted

技术标签:

【中文标题】HTML5 视频加载数据事件在 IOS Safari 中不起作用【英文标题】:HTML5 Video loadeddata event does not work in IOS Safari 【发布时间】:2016-01-22 20:51:47 【问题描述】:

我正在尝试在视频加载第一帧后触发事件。我使用的代码在我测试过的桌面浏览器中有效,但在 ios 上的移动 safari 中无效。是否存在移动 safari 不支持的代码,或者是否有其他解决方案可以实现我想要的?

function loadvideo (vidsource)

var vid = document.createElement('video');
vid.src = vidsource;

alert("Video about to load"); //This works fine in mobile safari
vid.addEventListener('loadeddata', function() 
alert("Video Loaded!"); //This does not display in mobile safari
//Will do something else here
, false);


【问题讨论】:

我的猜测是您没有从 click 或 touchend 事件处理程序调用 loadvideo 那么有什么方法可以模仿吗?由于视频不会显示在屏幕上(仅显示缩略图),因此用户无法启动 AFAIK,只要用户点击任意位置(不一定非要点击视频),就可以加载视频 【参考方案1】:

在 iOS 上,除非用户点击播放,或者添加了自动播放属性(实际上并没有自动播放),否则视频似乎不会加载。

以下内容应该适合您:

var vid = document.createElement('video');
if (/iPad|iPhone|iPod/.test(navigator.userAgent))
    vid.autoplay = true;
vid.addEventListener('loadeddata', function() [...], false);
vid.src = videosource;

或者,您可以收听progress 事件而不是loadeddata,这在iOS Safari 上似乎可以正常工作。

【讨论】:

但是自动播放不会让总是播放视频吗? 不确定自动播放部分,但progress 事件确实在任何地方都有效。您可以添加 once: true 而不是false 来获取第一帧。【参考方案2】:

在这种情况下尽量不要使用addEventListener,使用旧的on 样式,并在设置事件侦听器后设置src:

...
vid.onloadeddata = function () 
    alert("Video Loaded!");
    // do something

vid.src = vidsource;
...

如果在 EventTarget 处理事件时将 EventListener 添加到 EventTarget,则不会被当前操作触发,但可能会在事件流的后期阶段(例如冒泡阶段)触发。 - 了解更多 - https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

【讨论】:

适用于桌面浏览器,但不适用于移动 safari 浏览器。我正在制作一个移动网络应用程序,因此它在移动 Safari 浏览器上运行至关重要 尝试检查您的视频 mime 类型,也许 brouser 无法理解。该视频可在 iPhone 上播放 - <video loop autoplay controls="true" width='100%' height='100%' src='//some_video.mp4' type='video/mp4'></video>- 更多信息请点击此处developer.apple.com/library/safari/documentation/… 它们是直接来自个人相机胶卷的视频。用户上传它们。所以它们是 100% 兼容的 这可能是因为 Apple 已禁用所有事件,直到用户实际播放视频? 真的,我不知道,不过你可以试试看,一切皆有可能【参考方案3】:

preload="metadata" 添加到视频标签,然后监听loadedmetadata 事件。它也适用于 IOS Safari

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于HTML5 视频加载数据事件在 IOS Safari 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

HTML5 视频 - 文件加载完成事件?

HTML5 视频 - 文件加载完成事件?

iOS 是不是提供与 AirPlay 相关的 HTML5 视频事件?

Javascript onloadedmetadata 事件未在 iOS 设备上触发

可以在 iOS 设备上强制 HTML5 视频预加载吗?

当视频更改而不重新加载页面时,HTML5 视频元素缺少 END 事件