出于某种原因,我确信 DivX 的人们认为这很重要,没有直接的方法可以阻止他们的插件用他们喜欢的徽标替换您页面上的所有视频元素。
我需要的是一种解决方法,告诉插件跳过一些视频,即不要用它们的可播放内容替换它们。
出于某种原因,我确信 DivX 的人们认为这很重要,没有直接的方法可以阻止他们的插件用他们喜欢的徽标替换您页面上的所有视频元素。
我需要的是一种解决方法,告诉插件跳过一些视频,即不要用它们的可播放内容替换它们。
我通过放置一个空的 HTML 5 视频标签,然后在 body onload 事件中的 JavaScript 函数中放入视频源标签来解决这个问题。然后视频会出现在普通的 HTML 5 播放器中,而不是 DivX 网络播放器中。
例如,这会给 DivX 播放器:
<video width="320" height="240" controls="controls">
<source src="movie.mp4" type="video/mp4" />
</video>
但这会给普通的 html 5 播放器:
<head>
<script type="text/javascript">
function changevid() {
document.getElementById('vid').innerHTML = '<source src="inc/videos/sample1.mp4" type="video/mp4" />';
document.getElementById('vid').load();
}
</script>
</head>
<body onload="changevid()">
<video id="vid" width="800" height="450" controls="controls">
</video>
</body>
目前,没有任何 API 或方法可以阻止 divx 插件用占位符替换视频元素。:-(
我开始对 divx-plugin 进行逆向工程,以找出如何破解禁用它的方法。一个例子,包括 divx-plugin 的完整源代码,可以在这里找到:http: //jsfiddle.net/z4JPB/1/
目前在我看来,一个可能的解决方案可以像这样工作:
appendChild
,replaceChild
并且insertBefore
- 这必须在执行 chrome-extension 的内容脚本之前发生。DOMNodeInsertedIntoDocument
和DOMNodeInserted
事件看来,该插件仅在标签中有src
元素时才替换视频。video
对我来说,它首先添加video
标签,然后 - 在第二个线程中 - 添加src
标签。但是,这在 IE 中不起作用,但 IE 一次插入完整的视频标签没有问题。
因此,以下代码在所有浏览器中都适用于我(当然,需要 jQuery):
var $container = $('video_container');
var video = 'my-movie';
var videoSrc = '<source src="video/'+video+'.mp4" type="video/mp4"></source>' +
'<source src="video/'+video+'.webm" type="video/webm"></source>' +
'<source src="video/'+video+'.ogv" type="video/ogg"></source>';
if(!$.browser.msie) {
$container.html('<video autoplay loop></video>');
// this timeout avoids divx player to be triggered
setTimeout(function() {
$container.find('video').html(videoSrc);
}, 50);
}
else {
// IE has no problem with divx player, so we add the src in the same thread
$container.html('<video autoplay loop>' + videoSrc + '</video>');
}