本演示文稿的幻灯片 25/26讨论了插入脚本的不同方法的特征。它表明 IE 是唯一会按顺序执行这些脚本的浏览器。所有其他浏览器将按照它们完成加载的顺序执行它们。如果一个或多个有内联 js 而不是 src,即使 IE 也不会按顺序执行它们。
建议的方法之一是插入一个新的 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;
编辑:尽管我找到的文章说了什么,但我的测试表明大多数浏览器都会按顺序执行你的 document.write 脚本,如果它们每个都有一个 src,所以虽然我认为上面的方法是首选,你也可以这样做:
<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 函数替换它并用不同的参数调用它......