【问题标题】:Calling java script files synchronously failing in Microsoft Edge browser.在 Microsoft Edge 浏览器中异步调用 javascript 文件失败。
【发布时间】:2017-01-09 12:51:10
【问题描述】:

我有 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 浏览器中出现。

【问题讨论】:

  • 你是如何运行 ajax 调用的?只是在 1.js 文件中?或 ondocumentready 事件,或 onload?
  • 我正在 ondocumentready 事件上运行 ajax 调用。

标签: javascript html microsoft-edge java-scripting-engine


【解决方案1】:

我建议先阅读这个主题:

Deep dive into the murky waters of script loading by Jake Archibald

编辑:正如connexofriendly 指出的那样,MS Edge 从版本 12 开始支持onreadystatechange 事件,但似乎带有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 中也可以立即完成。

【讨论】:

猜你喜欢
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 2016-04-20
  • 2017-10-31
  • 1970-01-01
  • 1970-01-01
  • 2020-05-03
相关资源
最近更新 更多