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

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

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

4 ответа

Решение

Я справился с этим, поместив пустой тег 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>

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

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

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

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

Кажется, что плагин заменяет только видео, когда есть 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>');
}
Другие вопросы по тегам