2013-04-27 33 views
0

我想在当前请求完成加载下一一组一个接一个的网页,和负载,加载一个iframe中的一组一个接一个网页

现在在我的示例页面,我只有一个iframe中,

<iframe onload="loadNext()"></iframe>

我使用下面的脚本来完成这项工作,

var i = 0; 

    function loadNext() 
    { 
     var urls = [ 
     'http://localhost/a.htm', 
     'http://localhost/b.htm', 
     'http://localhost/c.htm', 
     ]; 

     if (i > urls.length - 1) 
     { 
      console.log ("Done!"); 
      return; 
     } 

     document.querySelector('iframe').src = urls[i ++]; 
    } 

但onload事件被触发太快了,我期望看到的3页按顺序加载,但它不是(从铬浏览器中的Network选项卡),我甚至没有看到nginx中的访问日志。

任何想法,为什么它不工作?

+0

那么会发生什么?页面加载但按不同的顺序? – zeroflagL 2013-04-27 10:57:54

+0

@zeroflagL看起来并不真的“等待”当前的加载进度,只是立即跳到下一页 – daisy 2013-04-27 11:03:02

+0

但是'loadNext()'被调用四次,最后一次调用打印“完成”?或者,那也不行? – zeroflagL 2013-04-27 11:12:01

回答

1

你的代码应该可以工作。我已经测试过这个,并且在每个帧加载之前还添加了一个timeout,以便您可以看到更改。

var URLs = [ 
    'http://localhost/a.htm', 
    'http://localhost/b.htm', 
    'http://localhost/c.htm', 
    'http://localhost/d.htm' 
]; 

function loadNext(){ 

    var frameWindow = document.getElementById('test').contentWindow; 

    if(URLs.length > 0){ 
     setTimeout(function(){ 
      frameWindow.location.replace(URLs.shift()); 
     }, 1000); 
    } 
} 

<iframe id="test" onload="loadNext();"></iframe> 

会不会是因为你从localhost加载,加载时间是如此之小,你不会注意到它?

+0

为setTimeout()+1,我犯了一个错误,c.html包含一个加载b.html的iframe使我困惑... – daisy 2013-04-27 13:00:22

相关问题