JavaScript脚本动态脚本加载IE6问题

时间:2010-02-12 14:42:41

标签: javascript internet-explorer-6 dynamic-script-loading

我正在使用内部自定义库来复制jsonp调用。在你们让我使用JQuery或其他库之前,让我告诉我由于某些限制我不能使用它。

以下是用于发出请求的代码:

BurrpJsonAjaxRequest.prototype.send = function() {
   this.script = document.createElement("script");
  this.script.type = "text/javascript";
  this.script.charset = "UTF-8";
  this.script.src = this.URL;

  if (typeof(this.callBack) == "function") {
    this.script.callback = this.callBack;
  }

  var currRequest = this;

  //sleep(100);

  if (this.script.src.readyState) {  //IE
    this.script.src.onreadystatechange = function() {
      if (this.script.src.readyState == "loaded" ||
        this.script.src.readyState == "complete") {
        this.script.src.onreadystatechange = null;
        currRequest.hideLoading();
        currRequest.callback();
      }
    };
  } else {  //Others
    this.script.src.onload = function() {
      currRequest.hideLoading();
      currRequest.callback();
    };
  }


  this.docHead.appendChild(this.script);
};

这在第一次执行时有效。在后续执行时,发出请求但不执行回调。

如果我使用如下所示的睡眠方法(在代码中注释),则回调也会在后续调用中执行。

function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i  milliseconds){
      break;
    }
  }
}

睡眠如何影响回叫的执行?在Firefox中工作得很好。

1 个答案:

答案 0 :(得分:0)

首次,this.script.src.readyState为 false (脚本仍在加载),并为onLoad事件创建了一个处理程序。当触发onLoad时,将调用匿名onLoad函数 - 它看起来与onReadyStateChange处理程序非常相似。但是,onLoad只触发一次,因此只调用一次函数。

执行if语句时,睡眠会减慢执行enuf,因此this.script.src.readyState为 true

您怎么看?