sid*_*rcy 8 javascript error-handling video html5
我想为一个简单的HTML5视频元素添加一些错误处理.我使用这个在网上到处出现的代码块:
JS
function playbackFailed(e) {
// video playback failed - show a message saying why
switch (e.target.error.code) {
case e.target.error.MEDIA_ERR_ABORTED:
alert('You aborted the video playback.');
break;
case e.target.error.MEDIA_ERR_NETWORK:
alert('A network error caused the video download to fail part-way.');
break;
case e.target.error.MEDIA_ERR_DECODE:
alert('The video playback was aborted due to a corruption problem or because the video used features your browser did not support.');
break;
case e.target.error.MEDIA_ERR_SRC_NOT_SUPPORTED:
alert('The video could not be loaded, either because the server or network failed or because the format is not supported.');
break;
default:
alert('An unknown error occurred.');
break;
}
}
Run Code Online (Sandbox Code Playgroud)
HTML
<video id="a" src="tgif.vid" autoplay controls onerror="playbackFailed(event)" poster="http://img.rasset.ie/000736d2-512.jpg" width="620" height="400"></video>
Run Code Online (Sandbox Code Playgroud)
以上工作正常,当页面加载时我得到一个快速警报框.
但是,如果我没有"src"属性而是使用元素"onerror(event)"中的<source>标签<video>不会触发?示例标记:
<video id="b" autoplay controls onerror="playbackFailed(event)" poster="http://img.rasset.ie/000736d2-512.jpg" width="620" height="400">
<source src="tgif.vid">
</video>
Run Code Online (Sandbox Code Playgroud)
注意我已经在ids"a"和"b"之上给出了两个视频元素.
有人可以在下面的代码中解释原因:
<script>
var a = document.getElementById('a');
var b = document.getElementById('b');
a.addEventListener('error', function(e){alert('error event on a')});
b.addEventListener('error', function(e){alert('error event on b')});
</script>
Run Code Online (Sandbox Code Playgroud)
我只收到"a"而不是"b"的警报
我需要使用<source>标签,因为我将为不同的设备提供多种媒体类型等.
提前感谢您的任何答案/评论
小号
如果涉及到源,则必须从<source>元素本身捕获加载源中的错误.但是,要检查所有<source>元素是否都失败,请检查<video>元素的networkState属性(如果是)NETWORK_NO_SOURCE.
有关以下内容的更多详细信息:
HTML
<video id="b" autoplay controls poster="http://img.rasset.ie/000736d2-512.jpg" width="620" height="400">
<source src="tgif.vid" />
<source src="http://html5doctor.com/demos/video-canvas-magic/video.mp4" />
<source src="http://html5doctor.com/demos/video-canvas-magic/video.webm" />
<source src="http://html5doctor.com/demos/video-canvas-magic/video.ogg" />
</video>
Run Code Online (Sandbox Code Playgroud)
JS(使用处理程序来避免inine脚本)
var sources = document.getElementsByTagName('source'),
i;
for (i = 0; i < sources.length; i++) {
(function (i) {
sources[i].addEventListener('error', function (e) {
console.log('Error loading: '+e.target.src);
});
}(i));
}
Run Code Online (Sandbox Code Playgroud)