如果使用document.write,javascripts是否同步加载?

lyu*_*uba 7 javascript ajax document.write

如果你像这样加载javascript到页面是否相同:

<script src="http://domain.net/script.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

并且喜欢这个

<script type="text/javascript">
  document.write("<script src='http://domain.net/script.js' type='text/javascript'></script>");
Run Code Online (Sandbox Code Playgroud)

我在js中有很多依赖项,并希望将其配置为一个单独的数组,它们只是在index.html中捆绑,如:

<script type="text/javascript">
  for (i in config.files.javascripts) {
    document.write("<script src='config.files.javascripts[i]' type='text/javascript'></script>");
  }
</script>
Run Code Online (Sandbox Code Playgroud)

问题是 - 它是否应按预期工作,以便下一个文件在上一个文件加载之前不会被执行?

这是我正在做的前端没有服务器端,它有时也可以作为小部件工作,但对于开发和测试我们应该加载未合并和未压缩的文件进行测试.

谢谢!

Már*_*son 7

回答你的问题:是的,加载的脚本document.write保证按写入的顺序执行.

同样适用于使用W3C DOM方法加载的脚本.

var scriptElm = document.createElement('script');
scriptElm.defer = true; // Causes faster (parallel) loading in some browsers.
scriptElm.src = 'path/to/script.js';
document.getElementsByTagName('head')[0].appendChild( scriptElm );
Run Code Online (Sandbox Code Playgroud)

也就是说,document.write()通常被认为是非常糟糕的做法(由于各种原因),并且可能导致后来的破损和恼人的边缘案例问题.因此,我建议您使用上面显示的W3C DOM注入,如果没有别的话.

- - - -
然后有脚本加载库,使这种资源加载更容易,更优雅,有时甚至更快.有些并行加载脚本但是以可预测的顺序执行 - 就像已经链接到@ CoBaLt2760的那样http://www.dustindiaz.com/scriptjs

jQuery还有一个非常简单的方法$.getScript( 'path/to/script.js' );(文档),你可以使用.如果内存对我有用,它使用简单的W3C DOM注入.

谷歌"javascript加载"或其他一些,或在StackOverflow上搜索,如果您对这些库的更多链接感兴趣,请参阅.