2015-01-29 1 views
1

Я использую следующий код, чтобы изменить источник звукового элемента HTML5:Как изменить источник звука для Firefox?

$('#mp3').attr('src', url); // please note that remote URL is used 
$("#audio").load(); 

и вот HTML:

<audio id="audio" class="hidden"> 
    <source type="audio/mpeg" id="mp3"> 
</audio> 

Он хорошо работает в Google Chrome, Safari, IE. Но Firefox 34 возвращает следующую ошибку:

<source> element has no "src" attribute. Media resource load failed. 

Что здесь не так?

Обновление. Я проверяю, работает ли он, ожидая вызванного события canplaythrough. Наверное, это проблема?

Я пытался также удалить элемент и добавить его снова, но он не работает:

$("#audio").empty(); 
$("<source>").attr("src", url).attr("type", "audio/mpeg").appendTo("#audio"); 
$("#audio").load(); 
+0

Проверьте это http://stackoverflow.com/questions/17300640/html-audio-cannot-find-file-after-changing-source-through-jquery – Nico

+0

@ Нико, спасибо, но это помогло, но только один раз - звук начал играть, но он больше не работает. Попробуем выяснить, что произошло. –

+0

@Nico, этот подход работает только в том случае, если я открыл файл (= загружен) вручную раньше. –

ответ

1

Я нашел две проблемы с кодом, я использовал в отношении к Firefox:

1) src изменение атрибута. Как уже упоминалось @Nico, Firefox не работает должным образом с прямым изменением src значения, так что мне пришлось заново создать исходный элемент:

$("#audio").empty(); 
$("<source>").attr("src", url).attr("type", "audio/mpeg").attr("id", "mp3").appendTo("#audio"); 
$("#audio").load(); 

2) когда src значения изменяются, Firefox не запускается для загрузки аудио (см. this answer), поэтому canplaythrough никогда не вызывается. Добавление preload="auto" помогло:

<audio id="audio" class="hidden" preload="auto"> 
    <source type="audio/mpeg" id="mp3"></source> 
</audio> 

JSFiddle

Смежные вопросы