我遇到了一个问题,即我的应用程序位于iframe中,并且是从外部域调用的。当iframe正确加载时,IE9不会触发load事件,因此我认为我无法使用setTimeout来轮询页面。

无论如何,我想查看setTimeout通常需要多长时间,因此我希望能够记录setTimeout从回调中触发的延迟,但是我不确定如何将上下文传递给它,因此我可以记录下来。

App.readyIE9 = function() {
  var timings = [1,250,500,750,1000,1500,2000,3000];
  for(var i = 0; i < timings.length; i++) {
    var func = function() {
    if(App.ready_loaded) return;
      console.log(timings[i]);
      App.readyCallBack();
    };
    setTimeout(func,timings[i]);
  }
};

我一直收到LOG:在IE9的控制台中未定义。

什么是实现此目的的适当方法?

谢谢

最佳答案

发生这种情况是因为您没有在i中接近func的值。循环完成后,i为8(timings.length),它在数组中不存在。

您需要执行以下操作:

App.readyIE9 = function() {
  var timings = [1,250,500,750,1000,1500,2000,3000];
  for(var i = 0; i < timings.length; i++) {
    var func = function(x) {
      return function(){
          if(App.ready_loaded) return;
          console.log(timings[x]);
          App.readyCallBack();
      };
    };
    setTimeout(func(i),timings[i]);
  }
};

07-24 17:11