在什么浏览器上自动评估附加到文档的<script>标记?</script>

时间:2009-08-02 07:44:48

标签: javascript cross-browser script-tag

在许多浏览器上,如果我这样做:

var x = document.createElement("SPAN");
x.innerHTML = "<script>alert(1);</script>";   
document.body.appendChild(x);

不会发生警报。

是否有任何浏览器可以实现?如果是的话,哪些?

3 个答案:

答案 0 :(得分:2)

无。 innerHTML不运行脚本元素(除非它们有defer属性,但我不认为这是通用的。)

我没有对以下内容进行过测试,但在支持DOM和JS的浏览器中应该普遍支持它。

var script = "alert(1)";
var script_node = document.createTextNode(script);
var script_element = document.createElement('script');
script_element.type = "text/javascript";
script_element.appendChild(script_node);
document.body.appendChild(script_element);

答案 1 :(得分:-1)

正如大卫指出的那样,使用.innerHTML是行不通的。

认为大多数人会认为添加到DOM是一种方法,这种方法在Safari 2.0上不起作用。

scriptaculous中使用的最佳方法是使用document.write()

// inserting via DOM fails in Safari 2.0, so brute force approach
document.write('<script type="text/javascript">alert("hi");<\/script>');

答案 2 :(得分:-1)

通过innerHTML添加脚本在我所知道的任何浏览器中都不起作用。通过dom添加脚本节点在IE中不起作用。如果你有一个html字符串,其中包含你想要插入页面的脚本标签,你最好的办法是提取脚本标签内容并评估它。原型库有一个方便的evalScripts函数来完成这个(以及插入html和eval脚本等的其他函数)。