Предотвратить веб-плагин divx, заменяющий элемент видео html5? - PullRequest
12 голосов
/ 20 января 2011

По какой-то причине я уверен, что люди в DivX считают это важным, и не существует простого способа помешать их плагину заменить все элементы видео на вашей странице их причудливым логотипом.

Что мне нужно, так этоОбходной путь для этого - сказать плагину пропустить некоторые видео, то есть не заменять их воспроизводимым контентом.

Ответы [ 4 ]

9 голосов
/ 08 августа 2012

Я справился с этим, поместив пустой тег HTML 5 video, а затем вставив теги source видео в функцию 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 голосов
/ 23 января 2011

В настоящее время не существует API или средств, которые не позволяли бы плагину divx заменять элементы видео на их заполнители.: - (

2 голосов
/ 19 мая 2012

Я начал перепроектировать плагин divx, чтобы узнать, что можно сделать, чтобы взломать его. Пример, включая полный исходный код модуля divx, можно найти здесь: http://jsfiddle.net/z4JPB/1/

В настоящее время мне кажется, что возможное решение может работать так:

  • создать «чистую» резервную копию методов appendChild, replaceChild и insertBefore - это должно произойти до того, как будет выполнен скрипт содержимого из расширения chrome.
  • скрипт содержимого будет выполнен, переопределит методы, упомянутые выше, и добавит прослушиватели событий к событиям DOMNodeInsertedIntoDocument и DOMNodeInserted
  • после этого прослушиватели событий могут быть удалены, а исходные DOM-методы восстановлены. Теперь вы должны иметь возможность заменить встроенные элементы, созданные плагином, на видео-элементы
1 голос
/ 02 ноября 2012

Похоже, что плагин заменяет видео, только если в теге video есть элементы src.Для меня это сработало, сначала добавив тег 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>');
}
...