在许多浏览器上,如果我这样做:
var x = document.createElement("SPAN");
x.innerHTML = "<script>alert(1);</script>";
document.body.appendChild(x);
不会发生警报。
是否有任何浏览器可以实现?如果是的话,哪些?
答案 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脚本等的其他函数)。