我正在使用xmlhttprequest
(和eval
)来动态加载脚本。接下来,我评估脚本并查看是否还有其他要加载的脚本。在此过程中,如果任何脚本导致异常,则报告的错误消息指示与eval
关联的行号,而不是脚本中的实际错误。
在another question,有人建议我使用<script>
来获取更好的错误消息。不幸的是,<script>
是异步的,我将无法控制脚本的加载顺序(我需要onload
回调)。
如何在<script>
命令
关于我的目标实现的更多信息
每个脚本都有一个其加载的其他脚本列表,存储在列表中,我们可以调用它_toLoad
假设我们有一个脚本'Main.js',其负载列表如此
_toLoad = [['A.js'] , ['B.js'] , ['C.js'] , ['D.js' , 'E.js' , 'F.js']]
说明一旦加载,必须加载文件'A.js'。加载'A.js'后,必须加载'B.js'。加载'B.js'后,必须加载'C.js'。加载'C.js'后,必须以任何顺序加载'D.js','E.js'和'F.js'。
我可以使用<script>
加载'Main.js',评估它的_toLoad
列表,然后按正确的顺序开始加载其他脚本。但是,如果'A.js'还有多个脚本也会加载,会发生什么?我希望那些在后台加载,而不是延迟'B.js'加载
如果'A.js'有这样的加载列表怎么办:
_toLoad = [['A2.js'] , ['B2.js'] , ['C2.js'] , ['D2.js' , 'E2.js' , 'F2.js']]
我是否必须通过并发布<script>
声明。当我首先想要一种广度时,这似乎是一种深度优先的方法。
答案 0 :(得分:1)
其中一个链接问题提到了设置script标签元素的innerHTML。我想这可能是do the trick
function load(toEval, callback){
__global_callback = callback;
var node = document.createElement('script');
node.innerHTML = toEval + '; __global_callback()';
document.getElementsByTagName('head')[0].appendChild(node);
}
load("console.log('before...');", function(){
console.log('...and after');
});