HTML5 настройка источника звука в javascript не работает
Из-за трюков форматов браузера HTML5 я должен поставить резервные аудиоформаты также в аудиоформате. Я хочу установить src источника в аудио программно, но он не работает.
Это мой HTML-код:
<audio id="audioPlayer" width="400" height="30" controls="controls">
<source id="oggSource" type="audio/ogg" />
<source id="mp3Source" type="audio/mp3" />
</audio>
Затем в javascript с использованием jquery я устанавливаю источник для каждого из них (у меня есть один звуковой тег и много mp3 на странице и на основе какого-то события я хочу изменить источник звукового тега), поэтому я не могу напрямую указать src в аудио в основном потому, что мне нужна поддержка резервного копирования, а также мне нужен динамизм.
Использование jquery Я управляю src:
$('#oggSource').attr('src', 'OggFormat.ogg');
$('#mp3Source').attr('src','Mp3Format.mp3');
Но это, однако, не работает. Любая идея почему?
Если я использую:
<audio id="audioPlayer" width="400" height="30" controls="controls">
<source id="oggSource" type="audio/ogg" src="OggFormat.ogg" />
<source id="mp3Source" type="audio/mp3" src="Mp3Format.mp3"/>
</audio>
он работает, но поскольку мне нужно, мне нужно установить его в код и не предоставлять статически.
Ответы
Ответ 1
Использование .detach().appendTo(parent)
похоже работает: http://jsfiddle.net/pimvdb/b7Jgh/.
$("#oggSource").attr("src", "foo.ogg").detach().appendTo("#audioPlayer");
Я думаю, браузер начинает загрузку (и играет с autoplay
), если добавлен элемент <source>
, а не когда он только что изменен. Однако я не знаю, почему, но добавив его после отсоединения.
Изменить: Вы также можете непосредственно сделать .appendTo
, поскольку элемент уникален (т.е. он должен быть отсоединен в любом случае): http://jsfiddle.net/pimvdb/b7Jgh/6/.
function updateSource(source, src) {
source = $(source);
source.attr("src", src).appendTo(source.parent());
}
Ответ 2
После того, как вы установите атрибут src в исходном элементе, вызовите load(), а затем play() на аудиоэлементе. (Или просто load(), если у вас установлен атрибут автовоспроизведения.)
Ответ 3
Вы пробовали document.getElementById("oggSource").src = 'OggFormat.ogg'
и т.д.?