1

我已经设置了一些 HTML5,一切都在跨浏览器加载。

我需要执行以下事件来拉取视频尺寸:

$('#video').on('loadedmetadata',function(){
   var width=this.videoWidth, height=this.videoHeight;
   alert("meta has loaded!")
});

这会在所有浏览器中发出警报,Safari 除外。我一直在努力弄清楚为什么加载的元数据没有触发,但后来意识到如果我开始播放电影......它就会触发。

但是,我需要先检索视频的尺寸,然后才能播放它。有没有办法在 Safari 中做到这一点

  • 强制 Safari 像其他浏览器一样提前加载元数据?
  • 使用加载元数据以外的其他方法?

更新:这是来自苹果网站的确切代码:

<!doctype html>
<html>
<head>
    <title>Resizing Movies</title>
    <script type="text/javascript">
        // set height and width to native values
        function naturalSize() {
            var myVideo = document.getElementsByTagName('video')[0];
            myVideo.height = myVideo.videoHeight;
            myVideo.width = myVideo.videoWidth;
            alert("pulling dimensions!")
        }
        // register listener function on metadata load
        function myAddListener(){
            var myVideo = document.getElementsByTagName('video')[0];
            myVideo.addEventListener('loadedmetadata', naturalSize, false);
        }
    </script>
</head>
<body onload="myAddListener()">
     <video src="http://homepage.mac.com/qt4web/myMovie.m4v" controls>
     </video>
</body>
</html>

但是,在调用视频之前,事件侦听器不会触发。这意味着在视频开始播放之前我无法拉出尺寸。这会在其他浏览器中发出警报,但不会在 Safari 中发出警报,因为(我猜)它是如何加载视频的。

所以,我不确定如何解决这个问题。

谢谢!

4

0 回答 0