在Microsoft Edge浏览器中同步调用java脚本文件失败。

时间:2017-01-09 12:51:10

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

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

1 个答案:

答案 0 :(得分:0)

我建议先阅读这个主题:

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

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

如果您的脚本是网络资源,您别无选择,只能向每个依赖项添加 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 中它也能立即完成。