同步<script>语句?</script>

时间:2011-10-24 02:13:43

标签: javascript eval synchronous

我正在使用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>声明。当我首先想要一种广度时,这似乎是一种深度优先的方法。

1 个答案:

答案 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');
});