JavaScript: изменение src-атрибута встроенного тега - PullRequest
10 голосов
/ 22 марта 2010

У меня есть следующий сценарий.

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

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> и как я могу обойти это?

Ответы [ 4 ]

21 голосов
/ 22 марта 2010

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

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

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

4 голосов
/ 26 июля 2011

Я также столкнулся с той же проблемой, когда я хочу изменить атрибут "src" элемента "embed", поэтому то, что я сделал, приведено ниже:

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

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

И это будет нормально работать в моемapplication.

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

2 голосов
/ 12 августа 2012

В Chrome есть ошибка, поставьте ей звездочку, чтобы исправить это раньше: http://code.google.com/p/chromium/issues/detail?id=69648

1 голос
/ 22 марта 2010

JQuery следует объявлению CSS-esque:

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

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".

...