防止divx web插件替换html5视频元素?

时间:2011-01-20 09:53:06

标签: html5-video divx

出于某些原因,我确信DivX的人认为很重要,没有直接的方法可以阻止他们的插件用他们喜欢的徽标替换页面上的所有视频元素。

我需要的是一个解决方法,告诉插件跳过一些视频,即不用他们的可播放内容替换它们。

4 个答案:

答案 0 :(得分:9)

我通过放置一个空的HTML 5视频标记,然后在body onload事件中的JavaScript函数中放入视频源标记来解决这个问题。然后该视频出现在普通的HTML 5播放器中,而不是DivX网络播放器。

e.g。 这将给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>

答案 1 :(得分:3)

此时,没有API或意味着阻止divx插件用其占位符替换视频元素。 : - (

答案 2 :(得分:2)

我开始对divx-plugin进行逆向工程,以找出可以采取哪些方法来破解它的禁用方法。一个例子,包括divx-plugin的完整源代码,可以在这里找到:http://jsfiddle.net/z4JPB/1/

目前在我看来,可能的解决方案可以这样工作:

  • 创建方法appendChildreplaceChildinsertBefore的“干净”备份 - 这必须在Chrome扩展程序执行内容脚本之前执行。
  • 内容脚本将执行,覆盖上述方法并将事件监听器添加到DOMNodeInsertedIntoDocumentDOMNodeInserted事件
  • 之后,可以删除事件侦听器并恢复原始DOM方法。您现在应该能够使用video-elements
  • 替换插件创建的embed-elements

答案 3 :(得分:1)

看来,当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>');
}