如何将<script>元素添加到DOM并执行其代码?</script>

时间:2011-06-21 22:57:35

标签: javascript html

我想在现有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但它没有给我提醒。

有人知道问题是什么吗?

2 个答案:

答案 0 :(得分:45)

我不知道YUI的Node.create()函数是如何工作的,所以没有评论。但是一个简单的跨浏览器脚本是:

  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 块是必要的,因为大多数浏览器都喜欢第一种方法,但有些浏览器不会抛出错误。第二种方法包括那些。您也可以简单地评估代码,这或多或少等同于某些库所做的。

答案 1 :(得分:3)

我在JQuery源代码中找到了这个函数,它似乎做了你想做的事情,感觉比其他方法更清晰。但是我再次成为JS初学者,可能不会看到细节。无论如何,有人可能会采取一些有用的东西。

function DOMEval( code, doc ) {
    doc = doc || document;

    var script = doc.createElement( "script" );

    script.text = code;
    doc.head.appendChild( script ).parentNode.removeChild( script );
}