Javascript script.readyState在IE11&;中未定义;FF

Javascript script.readyState在IE11&;中未定义;FF,javascript,internet-explorer-11,Javascript,Internet Explorer 11,我刚刚开发了一个动态脚本加载器,它在IE9中运行良好,但在IE11和FF中都没有 这是我的密码: function getResourceScript(filename) { var script = document.createElement('script'); script.setAttribute('src', mShuttlePath + "scripts/" + filename); script.setAttribute('type', 'text/jav

我刚刚开发了一个动态脚本加载器,它在IE9中运行良好,但在IE11和FF中都没有

这是我的密码:

function getResourceScript(filename)
{
    var script = document.createElement('script');
    script.setAttribute('src', mShuttlePath + "scripts/" + filename);
    script.setAttribute('type', 'text/javascript');
    script.setAttribute('language', 'javascript');
    document.getElementsByTagName('head')[0].appendChild(script);
}

function documentLoadInit()
{
    if (document.readyState == 'complete')
    {
        // check if all scripts are loaded
        for (var n = 0; n < document.scripts.length; n++)
        {
            if (document.scripts[n].readyState != "complete" && document.scripts[n].readyState != "loaded")
            {
                setTimeout(documentLoadInit, 49);
                return false;
            }
        }
        Init();
    }
    else
    {
        setTimeout(documentLoadInit, 49);
    }

}
getResourceScript("core/core.js");
getResourceScript("core/ajax.js");
函数getResourceScript(文件名) { var script=document.createElement('script'); setAttribute('src',mShuttlePath+“scripts/”+文件名); setAttribute('type','text/javascript'); setAttribute('language','javascript'); document.getElementsByTagName('head')[0].appendChild(脚本); } 函数documentLoadInit() { 如果(document.readyState=='complete') { //检查是否已加载所有脚本 对于(var n=0;n 这里的主要问题是,script.readyState在IE11中被删除了——我发现了这么多

但如何替换它呢?如何检查脚本何时加载/完成


有什么想法吗?

事实上,我想你是在问文件准备好之前是否已经准备好了。您需要设置一个状态更改侦听器,并在每次文档状态更改时进行检查

document.onreadystatechange = function () {
  if (document.readyState == "complete") {
    initApplication();
  }
}

阅读文档:

实际上,我想你是在问文档是否在准备好之前就准备好了。您需要设置一个状态更改侦听器,并在每次文档状态更改时进行检查

document.onreadystatechange = function () {
  if (document.readyState == "complete") {
    initApplication();
  }
}
阅读MSDN中的文档:

注意:对于脚本元素,
readyState
不再受支持。从Internet Explorer 11开始,使用
onload
。有关信息,请参阅兼容性更改

因此,您不必检查
readyState
,而可以使用如下内容:

if (!script.addEventListener) {
    //Old IE
    script.attachEvent("onload", function(){
        // script has loaded in IE 7 and 8 as well.
        callBack();
    });
}
else
{
    script.addEventListener("load", function() {
        // Script has loaded.
        callBack();
    });
}
另外,我很确定您可以改进代码。而
setInterval()
更适合这种情况。请阅读一些关于如何使用dom事件的内容,如果您仍然存在兼容性问题,可以使用以下内容:

function loadExtScript(src, test, callback) {
  var s = document.createElement('script');
  s.src = src;
  document.body.appendChild(s);

  var callbackTimer = setInterval(function() {
    var call = false;
    try {
      call = test.call();
    } catch (e) {}

    if (call) {
      clearInterval(callbackTimer);
      callback.call();
    }
  }, 100);
}
该函数将测试作为参数。既然你是应用程序的设计者,你就会知道什么是成功的测试。一旦此测试为真,它将执行回调。

来自MSDN:

注意:对于脚本元素,
readyState
不再受支持。从Internet Explorer 11开始,使用
onload
。有关信息,请参阅兼容性更改

因此,您不必检查
readyState
,而可以使用如下内容:

if (!script.addEventListener) {
    //Old IE
    script.attachEvent("onload", function(){
        // script has loaded in IE 7 and 8 as well.
        callBack();
    });
}
else
{
    script.addEventListener("load", function() {
        // Script has loaded.
        callBack();
    });
}
另外,我很确定您可以改进代码。而
setInterval()
更适合这种情况。请阅读一些关于如何使用dom事件的内容,如果您仍然存在兼容性问题,可以使用以下内容:

function loadExtScript(src, test, callback) {
  var s = document.createElement('script');
  s.src = src;
  document.body.appendChild(s);

  var callbackTimer = setInterval(function() {
    var call = false;
    try {
      call = test.call();
    } catch (e) {}

    if (call) {
      clearInterval(callbackTimer);
      callback.call();
    }
  }, 100);
}

该函数将测试作为参数。既然你是应用程序的设计者,你就会知道什么是成功的测试。一旦此测试为真,它将执行回调。

在脚本元素上使用
onload
事件。最后,您只想检查是否已加载所有脚本?在脚本元素上使用
onload
事件。最后,您只想检查是否已加载所有脚本?+1@Kovu不轮询状态更改,为此使用事件。javascript已经覆盖了+1@Kovu。不要轮询状态更改,使用事件进行更改。javascript已经介绍过了吗