同步& lt; script>语句

Synchronous <script> statements?

本文关键字:语句 script 同步 lt      更新时间:2023-09-26

我使用xmlhttprequest(和eval)来动态加载脚本。接下来,我对脚本进行评估,看看是否还有其他脚本要加载。在此过程中,如果任何脚本导致或异常,则报告的错误消息指示与eval相关的行号,而不是脚本中的实际错误。

在另一个问题上,建议我使用<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>声明。当我想要一个宽度优先的形式时,这似乎是深度优先的方法。

其中一个链接问题提到设置script标签元素的innerHTML。我想这可能会成功

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