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

Joe*_*phy 4 javascript jquery html5 html5-video ios

我当前项目的一部分涉及通过HTML5的原生视频标签加载外部视频,然后使用Javascript调整它们的大小,使其成为DOM的完整高度和宽度.

我的代码似乎在桌面浏览器上完美运行,但是当我在ipad上加载项目时,视频不会调整大小,因为onloadedmetadata事件永远不会被触发.

这是一个重现问题的小代码示例:

function init() {
    var video = document.getElementById('viddy');
    video.addEventListener('loadedmetadata', function(e){
        var dimensions = [video.videoWidth, video.videoHeight];
        alert(dimensions);
    });
}

document.addEventListener("DOMContentLoaded", init, false);


<video id="viddy" autoplay>
    <source src="http://media.w3.org/2010/05/sintel/trailer.webm" type='video/webm' />
    <source src="http://www.w3schools.com/html/movie.mp4" type="video/mp4" />
</video>
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/AUSNu/213/

我甚至尝试使用jQuery编写解决方案,但事件可能触发的可能性很小,但事实并非如此.

$('#viddy').on('loadedmetadata', function() {
   alert('test');
});
Run Code Online (Sandbox Code Playgroud)

我甚至通过我的ipad上的safari启用远程调试,但在控制台中仍然没有输出.

这有什么变通方法吗?我无法在网络/文档中找到有关此内容的更多信息.

bri*_*rls 6

不幸的是,没有办法解决这个问题.移动Safari不会下载视频文件的任何部分,直到它获得用户交互(即某种触摸事件),甚至不需要知道尺寸所需的标题.

在您的特定示例中,您需要启用视频控件,以便用户可以开始播放.(或者您可以编写自己的代码来启动它,但它必须通过触摸或单击事件触发.)一旦开始播放,loadedmetadata甚至会触发,您可以执行您想要的操作.

我推荐在其他人试图做同样的事情时阅读这个其他答案.它更详细地讨论了问题以及工作链接.此外,它解决了扩展您可能遇到的视频的另一个问题.

iPad(iOS6)上的Safari不会缩放HTML5视频以填充100%的页面宽度