2011-01-20 27 views
12

出於某種原因,我確信DivX的人認爲是重要的,沒有簡單的方法來阻止他們的插件用他們花哨的標誌替換頁面上的所有視頻元素。防止divx web插件fron替換html5視頻元素?

我需要的是一個解決方法,告訴插件跳過一些視頻,即不能用它們的可播放內容替換它們。

+2

我嘗試使用HTML5作爲我的網站上全屏背景。在啓用了DivX Web插件的機器上,由於該插件完全忽略了Zindexing,因此視頻會覆蓋在我的網站上。我個人覺得** BROWSER HIJACK **噁心。我以前對DivX有很多信心,他們當然會用這個可憐的藉口來摧毀這個插件。 – 2011-05-26 10:17:10

+0

可悲的是,我們無能爲力。 :-( – 2011-05-26 12:30:23

回答

9

我通過放置一個空的HTML 5視頻標記,然後將視頻源標記放入JavaScript函數在body onload事件中。然後視頻出現在普通的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> 
3

目前,沒有API或手段阻止divx插件用其佔位符替換視頻元素。 :-(

2

我開始對divx-plugin進行反向工程,找出可以採取什麼辦法來禁用它。一個例子,包括divx-plugin的完整源代碼,可以在這裏找到:http://jsfiddle.net/z4JPB/1/

目前,它在我看來,一個可能的解決辦法像這樣工作:

  • 創建的方法appendChildreplaceChildinsertBefore一個「乾淨」的備份 - 這個擁有從內容腳本之前發生鉻擴展被執行。
  • 內容腳本將執行,覆蓋上述方法並將事件偵聽器添加到DOMNodeInsertedIntoDocumentDOMNodeInserted事件
  • 之後,可以刪除事件偵聽器並恢復原始DOM-Methods。您現在應該可以用視頻元素替換由插件創建的嵌入元素
+0

不幸的是,這並沒有達到我想要的效果,唯一能解決這個問題的方法是觀察dom中不需要的「嵌入」標籤,然後將其刪除,並提供給瀏覽器,根本不支持視頻。 但是我確實聯繫過divx的人,他們告訴我他們會把它傳遞給他們的開發團隊 - 我不相信奇蹟,但是誰知道...... – 2012-06-01 15:46:12

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>'); 
}