四种动态加载 JavaScript 脚本的方法

作者:vkvi 来源:ITPOW(原创) 日期:2009-12-8

这四种方法中,应该说只有第一种是正统,因为其他三种总有些不妥,比如无法运行 alert,当然其他三种也是有优点的。

法一、创建 script

var script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", "foo.js");
document.getElementById("s1").appendChild(script);

法二、直接用 js 的 write

<div id="s1">
<script type="text/javascript">
<!--
document.write("<"+"script type='text/javascript'>var a = 123;document.write(a);<"+"/script>");
// 或先用 escape 编码
// document.write(unescape("%3Cscript%20type%3D%27text/javascript%27%3Evar%20a%20%3D%20123%3Bdocument.write%28a%29%3B%3C/script%3E"));
// 或直接引用文件
//document.write("<"+"script type='text/javascript' src='foo.js'><"+"/script>");
//-->
</script>
</div>

法三、直接用 innerHTML

document.getElementById("s1").innerHTML = "<"+"script type='text/javascript'>var a = 123; document.write(a);<"+"/script>"

这个东西最大的问题,就是如何让 innerHTML 的脚本段跑起来。

法四、用 innerHTML 转移

<div id="s1"></div>
<div id="s2">
<script type="text/javascript">
document.write("cftea");
alert("cftea");
</script>
</div>
<script type="text/javascript">
<!--
document.getElementById("s1").innerHTML = document.getElementById("s2").innerHTML;
//-->
</script>

和法三不同,这种情况下 innerHTML 的脚本会执行,郁闷的是,因为 s1、s2 中有相同的脚本,所以相当于执行了两次这些代码,这种方法在嵌入广告中用得比较多,让 s2 及 js 代码在最后,然后利用 innerHTML 将广告代码显示在 s1 这个期望的位置上。

相关文章