Если вам действительно нужно добавить a <param>
(в отличие от настройки значения атрибута), я обнаружил, что захват <object>
, клонирование, добавление <param>
и затем замена текущего тега <object>
, похоже, работает в большинстве браузеров (хотя в Firefox он не работает). См. этот ответ для рабочего примера.
Этот связанный ответ предназначен для каждого <object>
на странице. Вот как вы это сделаете для одного экземпляра тега:
// create the appropriate <param>
var elementToAppend = document.createElement('param');
elementToAppend.setAttribute('name', 'src');
elementToAppend.setAttribute('value', 'blah.midi');
// get a reference to the <object>
var obj = document.getElementById('yourMidiPlayerObject');
// duplicate the <object>
var newObj = obj.cloneNode(true);
// append the <param> to the <object>
newObj.appendChild(elementToAppend);
// replace the <object> on the page
obj.parentNode.replaceChild(newObj, obj);
Если <param>
, который вы хотите изменить, уже существует, все немного по-другому:
// get a reference to the <object>
var obj = document.getElementById('yourMidiPlayerObject');
// duplicate the <object>
var newObj = obj.cloneNode(true);
// get a reference to the current <param>
var param = document.getElementById('theParamId');
// duplicate the <param>
var newParam = param.cloneNode(true);
// change the value of the <param>
newParam.setAttribute('value', 'newblah.midi');
// replace the <param> tag on the <object>
newObj.replaceChild(newParam, param);
// replace the <object> on the page
obj.parentNode.replaceChild(newObj, obj);
В обоих случаях хитрость в том, чтобы заставить его работать в IE, Opera, Safari и Chrome, состоит в замене <object>
на странице. Добавление нового <param>
к существующему <object>
, по-видимому, не приводит к повторному анализу значения или загрузке вновь ссылающегося содержимого.