该演示文稿的第25/26张幻灯片谈论了不同插入脚本方法的特征。它表明,IE是唯一按顺序执行这些脚本的浏览器。其他所有浏览器将按照加载完成的顺序执行它们。即使IE在其中一个或多个脚本具有内联js而不是src时也不会按顺序执行它们。
建议之一是插入新的DOM元素:
var se1 = document.createElement('script');
se1.src = 'a.js';
var se2 = document.createElement('script');
se2.src = 'b.js';
var se3 = document.createElement('script');
se3.src = 'c.js';
var head = document.getElementsByTagName('head')[0]
head.appendChild(se1);
head.appendChild(se2);
head.appendChild(se3);
为了生成第二个脚本部分,您可以使用一个脚本来生成该内容并传递参数:
se2.src = 'generateScript.php?params=' + someParam
编辑:尽管我引用的文章说,如果每个脚本都有src,大多数浏览器将按顺序执行您的document.write脚本,但我的测试表明,所以虽然我认为上面的方法更好,但您也可以这样做:
<script language="javascript" type="text/javascript">
document.write("<script type='text/javascript' src='before.js'><\/sc" + "ript>");
document.write("<script type='text/javascript' src='during.php?params=" + params + "'><\/sc" + "ript>");
document.write("<script type='text/javascript' src='after.js'><\/sc" + "ript>");
</script>
再次编辑(回应对自己和他人的评论):你已经在页面上生成了脚本。无论你在做什么,都可以将其移动到另一个生成相同代码块的服务器端脚本中。如果你需要在页面上传递参数,则将它们传递给查询字符串中的脚本。
此外,如果像你所建议的那样多次生成内联脚本,则可以使用此相同方法:
<script language="javascript" type="text/javascript">
document.write("<script type='text/javascript' src='before.js'><\/sc" + "ript>");
document.write("<script type='text/javascript' src='during.php?params=" + params1 + "'><\/sc" + "ript>");
document.write("<script type='text/javascript' src='during.php?params=" + params2 + "'><\/sc" + "ript>");
document.write("<script type='text/javascript' src='during.php?params=" + params3 + "'><\/sc" + "ript>");
document.write("<script type='text/javascript' src='after.js'><\/sc" + "ript>");
</script>
然而,看起来你的方法可能是错误的。如果你正在多次生成大量代码,那么你应该用一个单独的JS函数替换它,并使用不同的参数调用它。