我有以下代码布局
<script src="http://some.javascript/file.js"></script> // This should load first
<script language="JavaScript">
document.write('<SCR'+'IPT language="JavaScript1.1" SRC="http://a.link.to.an.external.url/that/returns/a/full/html/page/including/some/javascript">'); // This should load second
document.write('</SCR'+'IPT>');
</script>
MyJavascriptFunctionThatDependsOnStuffLoadedFromThe.documentWritePage(); <!-- Those files above should have loaded before this call -->
我知道这看起来很奇怪。让我们假设 HAS 看起来像是因为不影响JS加载方式的原因。这不需要跨浏览器 - 只是WebKit浏览器。
如何确保每个文档在下一个文档之前完全加载?也就是说,如何确保这些文档同步加载,以便最后的函数调用可以采用适当的状态?
答案 0 :(得分:1)
JavaScript文件应该按顺序加载并阻塞,除非你所依赖的脚本做了一些不寻常的事情,你需要做的就是在其他文件之后加载application.js。
跨域脚本是在站点脚本之后加载的,这就是你得到错误的原因。
您可以添加事件侦听器并在此事件上加载js文件,如下所示:
function addJavaScript( js, onload ) {
var head, ref;
head = document.getElementsByTagName('head')[0];
if (!head) { return; }
script = document.createElement('script');
script.type = 'text/javascript';
script.src = js;
script.addEventListener( "load", onload, false );
head.appendChild(script);
}
答案 1 :(得分:0)
我认为你不能一直跨浏览器这样做。
IE(至少许多旧版本)将按照服务器返回的顺序处理脚本标记。许多其他浏览器按照定义的顺序处理它们。像这样动态添加到DOM的那个,谁知道呢?我当然不会指望能够控制执行的顺序,除非你在尝试添加下一个之前添加某种包装来测试一个包装器是否到位。
如果只是必须这样,我真的不知道该建议什么。但是如果你可以切换使用它们,有很多模块加载器。你可能会特别注意AMD