Добавляем элемент <script> в DOM и выполняем javascript?
Я хочу добавить элемент в существующую DOM, чтобы запустить javascript-код.
Я сделал это с YUI:
var scriptNode = Y.Node.create('<script type="text/javascript" charset="utf-8">alert("Hello world!");<\/script>');
var headNode = Y.one('head');
headNode.append(scriptNode);
Он успешно добавлен в DOM, но он не дает мне оповещения.
Кто-нибудь знает, в чем проблема?
Ответы
Ответ 1
Я не знаю, как работает функция YUI Node.create()
, поэтому не комментируйте это. Но простой кросс-браузер script:
window.onload = function() {
var s = document.createElement('script');
s.type = 'text/javascript';
var code = 'alert("hello world!");';
try {
s.appendChild(document.createTextNode(code));
document.body.appendChild(s);
} catch (e) {
s.text = code;
document.body.appendChild(s);
}
}
Блок try..catch необходим, как и большинство браузеров, таких как первый метод, но некоторые не делают и бросают ошибку. Второй метод охватывает их. Вы также можете просто оценить код, который более или менее эквивалентен и что делают некоторые библиотеки.
Ответ 2
Я нашел эту функцию в источнике JQuery, который, кажется, делает то, что вы хотите, и чувствует себя немного чище, чем другие подходы ко мне. Но опять же я начинаю JS и, вероятно, не вижу подробностей. В любом случае, кто-то может взять что-то полезное от этого.
function DOMEval( code, doc ) {
doc = doc || document;
var script = doc.createElement( "script" );
script.text = code;
doc.head.appendChild( script ).parentNode.removeChild( script );
}