Невозможно изменить источник видео тега через JavaScript на IE9

Привет, я работаю над HTML5 Video Player, в настоящее время я испытываю странную ошибку. Я могу нормально воспроизводить видео в IE и Chrome, однако, когда я хочу динамически изменить источник видео с помощью java-скрипта, у меня возникают проблемы. Chrome меняет источник видео без каких-либо проблем, однако IE9 сохраняет прежнее видео и просто не меняется. Safari тоже отлично работает.

Я попытался выполнить поиск в stackru и нашел довольно много одинаковых вопросов и попробовал почти каждый ответ, но кажется, что IE имеет свой собственный стиль работы, или я что-то упустил. Просто чтобы убедиться, что я переключаю файлы, чтобы убедиться, что оба видео работают в IE9, и оба работают, однако они просто не воспроизводятся, когда я пытаюсь манипулировать ими через javascript. пример кода ниже

<div class="video">
     <video id="example_video_2" class="video-js" width="640" height="264" controls="controls" preload="auto" >
        <source src="song.mp4" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"' />             </div>                
   </div>

в то время как JavaScript так же прост

function myNewSrc() {

    var myVideo = document.getElementById('example_video_2');
  // myVideo.src = "";
   myVideo.src = "120235_VIDHIGH.mov";
    //alert(myVideo.src);
    myVideo.load();

    myVideo.play();
    //changeMovieSource('song.mp4','something');
    //$("#example_video_2 > source").attr("src", "120235_VIDHIGH.mov");
    //alert($("#example_video_2 > source").attr("src"));    
    }

6 ответов

Решение

Удалите полный HTML-элемент видео и создайте новый вместо того, чтобы просто заменить один из его атрибутов.

В отличие от TweeZz я советую не удалять весь видеоэлемент, так как это нарушает код на iOS (и Android).

вместо этого не помещайте исходные элементы в ваш html, а вместо этого добавляйте их через JS. IE9 не позволяет этого, что опять же вы можете перехватить, а затем отредактировать атрибут src самого элемента video, как я показал здесь: тег Video не работает в IE 9

в качестве ярлыка, здесь код, который я разместил там:

$('video').append('<source src="' + pathMp4 + '" type="video/mp4"><source src="' + pathWebm + '" type="video/webm">');
if(!$('video').children('source').length) { // set src&type attribute for ie9/android3.1 because it does not add the source child-elements
    $('video').attr('src', pathMp4 ).attr('type','video/mp4');
}

Фон: когда вы устанавливаете исходные элементы в своем HTML, IE9 отдает приоритет этой информации. Позже, когда вы используете .src() Функция будет перезаписывать только атрибут src видеоэлемента, но из-за приоритета IE9 для исходного элемента это не будет иметь значения.

-> определенно ошибка в IE9

ОБНОВЛЕНИЕ: пожалуйста, проверьте этот пост для лучшего решения: видео тег не работает в IE 9

Была такая же проблема, как OP только с IE11. Ошибка "Неверный источник" возникнет даже при простом выполнении video.load() без изменения video.src. Моя проблема оказалась, что это также было связано с сервером ( IIS 7.5).

Перешли на более новый сервер (Windows Server 2012 R2 с IIS 8.5), и проблемы исчезли!

К вашему сведению: вы можете сделать эту работу, не используя <source> элементы и вместо этого с помощью src атрибут: <video id="example_video_2" class="video-js" width="640" height="264" controls="controls" preload="auto" > <source src="song.mp4" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"' /> </video>

Просто становится <video id="example_video_2" class="video-js" width="640" height="264" controls="controls" preload="auto" src="song.mp4" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'></video>

Не уверен, что это вызвало вашу проблему, но вам не нужно закрытие </video> тег? Я знаю, что некоторые закрывающие теги могут быть опущены в HTML5, но я не думал, что видео было одним из них, и это, вероятно, вызвало бы проблемы с javascript.

Я согласен с рекомендацией Беркефельда против замены всего элемента видео, НО есть лучшее решение этой проблемы, чем создание элемента видео и добавление видео с помощью javascript, как это предлагается.

Здесь я столкнулся с точно такой же проблемой, и после долгих (и я имею в виду много) проб и ошибок я нашел реальное решение и разместил его на этой странице. Internet Explorer был кошмаром при работе со сменой видео с помощью тегов HTML5, но это решает проблему.

Другие вопросы по тегам