分析以下代码:
<html>
<head>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
<script>
var a1 = "<div>a1</div><script>alert('a1');<\/script>";
var a2 = "<script>alert('a2');<\/script>"
document.getElementById("d1").innerHTML = a1;
document.getElementById("d2").innerHTML = a2;
</script>
</body>
</html>
上面代码中分别往【d1】和【d2】中通过 innerHTML 插入了一段 HTML 代码,且均包含有 SCRIPT 标签。区别为【d1】中插入的 HTML 代码比【d2】中在最开始多了一个 DIV 元素。
在 IE 中只弹出了 "a1" 提示框,即只有字符串 "a1" 中的脚本执行。这是 IE 的一个 Bug,所以通常为了使 innerHTML 插入的脚本能够在 IE 中正常执行,经常会在欲插入的 HTML 代码字符串的最开始增加一个不可见的元素。如:
[b][color=red]<span style="display:none;">span</span>[/color][/b]<script>alert('a1');<\/script>
参考:http://www.w3help.org/zh-cn/causes/BX9029
<html>
<head>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
<script>
var a1 = "<div>a1</div><script>alert('a1');<\/script>";
var a2 = "<script>alert('a2');<\/script>"
document.getElementById("d1").innerHTML = a1;
document.getElementById("d2").innerHTML = a2;
</script>
</body>
</html>
上面代码中分别往【d1】和【d2】中通过 innerHTML 插入了一段 HTML 代码,且均包含有 SCRIPT 标签。区别为【d1】中插入的 HTML 代码比【d2】中在最开始多了一个 DIV 元素。
在 IE 中只弹出了 "a1" 提示框,即只有字符串 "a1" 中的脚本执行。这是 IE 的一个 Bug,所以通常为了使 innerHTML 插入的脚本能够在 IE 中正常执行,经常会在欲插入的 HTML 代码字符串的最开始增加一个不可见的元素。如:
[b][color=red]<span style="display:none;">span</span>[/color][/b]<script>alert('a1');<\/script>
参考:http://www.w3help.org/zh-cn/causes/BX9029