2015-03-13 60 views
0

我在重新加載無限循環中的網站列表時遇到問題。 當我第一次嘗試做沒有iframe,第一個網站被加載,沒有其他事情發生。我想從列表中重新加載一些網站到iframe。應該沒有按鈕來重新加載站點,它應該是自動的 - >顯示站點,等待20秒,顯示站點2,等待60秒...我想有不同的延遲,所以這樣就有無限循環的睡眠。 在這一點上,我stucked :) 下面是我的(垃圾:))例子,我試圖運行。 任何想法如何做到這一點容易和儘可能小?Javascript - 重新加載無限循環中的網站

<html> 
 
    
 
<head> 
 
    
 
    <script language="JavaScript" type = "text/javascript"> 
 
    
 
    function sleep(delay) { 
 
    var start = new Date().getTime(); 
 
    while (new Date().getTime() < start + delay); 
 
    } 
 
    
 
    function changeSites() { 
 
     while(true){ 
 
     document.getElementById('myFrame').setAttribute('src', "http://www.google.com/"); 
 
     sleep(4000); 
 
     document.getElementById('myFrame').setAttribute('src', "http://www.yahoo.com/"); 
 
     sleep(2000); 
 
     document.getElementById('myFrame').setAttribute('src', "http://stackoverflow.com/"); 
 
     sleep(5000); 
 
    \t } 
 
    } 
 

 
    </script> 
 
    
 
</head> 
 

 
<body> 
 
    
 
    <iframe id="myFrame" width=100% height=100% > 
 
    
 
    <p>Your browser does not support iframes.</p> 
 
    
 
    </iframe> 
 

 
    <script language="JavaScript" type = "text/javascript"> 
 
    
 
    changeSites(); 
 

 
    </script> 
 
    
 
</body> 
 
    
 
</html> 
 

+0

什麼是你想實現這個? – 2015-03-13 11:56:27

+2

在JS中不使用'thread.sleep',因爲它是單線程的,你將鎖定瀏覽器。改用'window.setTimeout' /'window.setInterval'。 – Jonathan 2015-03-13 11:56:49

回答

0

那麼你可以做的是:

<script type="text/javascript"> 

var urls = ["http://www.google.com/", "http://www.yahoo.com/", "https://stackoverflow.com/"]; 
var index = 0; 
setInterval(function() { 
    document.getElementById('myFrame').setAttribute('src', urls[index]); 
    index = index+1; 
    if(index > urls.length-1) { 
     index = 0; 
    } 
}, 20000); 
</script> 

除了谷歌和其他人將不允許這樣做。見How to show google.com in an iframe?。您應該可以控制iframe中的嵌入式網站,或者對要嵌入的網站使用CORS等。

0

我會做這樣的事情:

var sites = [ 
    { 'src' : 'http://www.google.com', 'delay' : 4000 }, 
    { 'src' : 'http://www.github.com', 'delay' : 6000 } 
]; 
var index = 0, time, lastUpdate = new Date().getTime(); 

function showNextSite() { 
    document.getElementById('myFrame').setAttribute('src', sites[index].src); 
    lastUpdate = new Date().getTime(); 
    index++; 
    if(index >= sites.length) 
     index = 0; 
} 

setInterval(function() { 
    time = new Date().getTime(); 
    if (time >= lastUpdate + sites[index].delay) 
     showNextSite(); 
}, 1000); // lets only check this every second