2010-03-22 1 views
9

У меня есть следующий сценарий.JavaScript: изменение src-атрибута встраиваемого тега

Я показываю пользователю некоторые аудиофайлы с сервера. Пользователь нажимает на один, а затем onFileSelected в конечном итоге выполняется как с выбранной папкой, так и с файлом. То, что делает функция, это изменение источника из встроенного объекта. Таким образом, это предварительный просмотр выбранного файла, прежде чем принимать его и сохранить выбор пользователя. A visual aid.

HTML

<embed src="/resources/audio/_webbook_0001/embed_test.mp3" type="audio/mpeg" id="audio_file"> 

JavaScript

function onFileSelected(file, directory) { 
    jQuery('embed#audio_file').attr('src', '/resources/audio/'+directory+'/'+file); 
}; 

Теперь, это отлично работает в Firefox, но Safari и Chrome просто отказываются изменить источник, независимо от операционной системы.

jQuery находит объект (jQuery.size() возвращает 1), он выполняет код, но без изменения кода HTML.

Почему Safari не позволяет мне изменить источник <embed> и как я могу обойти это?

ответ

20

Вы должны удалить элемент embed и повторно установить его с помощью нового набора параметров src.

embedobject и аналогичные - это два элемента, которые благодаря своим особым потребностям (видео, аудио, flash, activex, ...) в некоторых браузерах обрабатываются иначе, чем обычный элемент DOM. Таким образом, изменение атрибута src может не вызвать ожидаемое действие.

Лучше всего удалить существующий объект embed, а затем снова вставить его. Если вы пишете какую-то функцию обертку с атрибутом SRC в качестве параметра это должно быть легко

+0

Я пытался, но он не работает так или иначе. Он добавил новый тег embed-tag, но не удалил старый. Я думаю об использовании этого варианта с iframe, но это не очень изящное решение. – Mike

+0

У меня была аналогичная проблема, и это сработало для меня. Благодаря! – petejamd

+0

Моя проблема заключалась в том, что программное изменение src и call play() по-прежнему вызывало воспроизведение оригинального src. Следуя этому совету, теперь я удаляю и снова добавляю элемент embed, и звук воспроизводится правильно. Спасибо – Scottm

1

JQuery следует CSS-эск декларации:

Вместо того чтобы делать

function onFileSelected(file, directory) { 
    jQuery('embed#audio_file').attr('src', '/resources/audio/'+directory+'/'+file); 
}; 

Скорее сделать

function onFileSelected(file, directory) { 
    jQuery('#audio_file').attr('src', '/resources/audio/'+directory+'/'+file); 
}; 

Таким образом, jQuery извлекает только объект id = "audio_file".

+0

Кажется, что ваш селектор «менее конкретный» и может иметь более высокий рейтинг производительности, не может увидеть соединение с вашей цитатой «Объявление CSS-esque» ... кроме того, если вы читаете OP, он работает на некоторые браузеры, но не все, поэтому это, вероятно, не синтаксическая ошибка ... – Leon

+0

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

4

Я был также сталкивается же проблема, когда я хочу, чтобы изменить «Src» элемента атрибута по «Встроить», так что я сделал, приводится ниже:

var parent = $('embed#audio_file').parent(); 
var newElement = "<embed src='new src' id='audio_file'>"; 

$('embed#audio_file').remove(); 
parent.append(newElement); 

И это будет нормально работать в моем приложении ,

Вывод: - Вам нужно сначала удалить элемент embed, а затем вам нужно вставить его с изменением в src.

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

  • Нет связанных вопросов^_^