0

我有 abc.html 页面,我在其中调用两个 javascript 文件,如下所示: -

<head>
  <script src="script_files/1.js"></script>
  <script src="script_files/2.js"></script>
</head>

在我的 1.js 文件中,我正在使用 ajax 调用加载 3.js 文件,因为我不需要在所有 html 文件中使用 3.js。

我正在通过 ajax 调用加载 3.js 文件,如下面的 1.js 文件所示:-

if(location.href.indexOf("abc.html") > -1 ){
    $.ajax({
        type: "GET",        
        url: 'script_files/3.js',
        dataType: "script",
        crossDomain: true,
        jsonp: false,
        error: function (XMLHttpRequest, textStatus, errorThrown) {
        },
        success: function () {
            console.log("Do Something");
        },
        async: false
    });
}

现在,当我加载我需要 3.js 文件的 abc.html 时。它进入 3.js ajax 调用,但在完成 ajax 调用之前,它进入 2.js 文件方法。

此问题仅在 Microsoft Edge 浏览器中发生。

4

1 回答 1

0

我建议先阅读这个主题:

深入了解 Jake Archibald 脚本加载的浑水

编辑:正如connexo友好指出的那样,MS Edgeonreadystatechange从版本 12 开始支持事件,但似乎带有content="ie=Edge"元标记的 IE11 必须使用onload事件。

如果您的脚本是 Web 资源,您别无选择,只能将onload事件处理程序添加到每个依赖项。它可能是与计数器相同的功能,以了解它们何时全部加载。然后动态加载所有其他脚本。

如果您可以将脚本作为本地资源访问,则可以通过以下方式加载它们:

var sPath = 'Local_path\\script.js';
var oFSO = new ActiveXObject('Scripting.FileSystemObject');
var oFile = oFSO.OpenTextFile(sPath, 1, true, 0); // ForReading, ANSI
var oScript = document.createElement('script');
oScript.type = 'text/javascript';
oScript.text = oFile.ReadAll();
document.head.appendChild(oScript); // Sync loading
oFile.Close();

它将脚本作为文本文件读取,然后将其内容作为内联块加载,因此即使在 MS Edge 中也可以立即完成。

于 2021-03-25T12:55:42.660 回答