2010-09-16 52 views
2

我有許多網頁需要每分鐘自動刷新一次。使用META REFRESH或一些JavaScript輕鬆完成。 (是的,整個頁面需要刷新 - 很多內容正在改變)。強大的自動刷新網頁

但是,它需要儘可能健壯。如果網絡服務器暫時關閉或存在網絡呃逆,它將無法刷新,然後會出現404錯誤等,並永久停留在錯誤頁面上。

我能想出的唯一選擇是將整個頁面託管在IFRAME中,並且在父頁面上有一些腳本新建了框架頁面。框架應該是不可見的,所以窗口的任何調整大小也需要調整IFRAME的大小。

有沒有更簡單,更優雅的解決方案? (由於時間限制,去Flash/AIR/Silverlight也不是一個選項)。

回答

5

您可以使用Ajax加載頁面的新內容。如果您的頁面是在服務器端生成的,那麼您可以忽略身體周圍的HTML並僅輸出它的內容。然後,您可以使用Ajax接收新主體,並用body.innerHTML = request.responseText替換頁面的現有主體。在Ajax回調中,您可以執行所有類型的錯誤處理,甚至忽略任何錯誤並重試Ajax請求。

<html> 
<head> 
<script type="text/javascript"> 
function doRequest() { 
    var request = new XMLHttpRequest(); 
    request.onreadystatechange = function() { 
     if (request.readyState == 4) { 
      if (request.status == 200) 
       body.innerHTML = request.responseText; 
      doRequest(); // restart the request 
     } 
    } 
    request.open("get", "", true); 
    request.send(null); 
} 
</script> 
<body onload="doRequest()"> 
Page content... 
</body> 
</html> 
+0

這是一個很酷的想法。我現在正在做,除了替換document.documentElement.innerHTML。這樣頁面可以繼續正常返回頭部和身體標籤。就我所知,似乎它在所有主流瀏覽器中運行良好。 – DougN 2010-09-18 14:14:55

+0

我避免了這種情況,因爲我不確定瀏覽器如何在標題中添加一個帶有腳本和css標籤的新文檔來處理它。它可能會在每次更換頁面時重新加載文件,這可能不是您想要的。另一個想法可能是使用response.responseXML並從中獲取body標籤並使用DOM方法將其克隆到您的文檔中,但我認爲您的頁面必須是XHTML,否則XML解析可能會失敗。 – Reboot 2010-09-18 15:55:51

+0

嗯,是的,經過更多測試後,它看起來像documentElement.innerHTML不起作用 - 它不會使用Chrome加載CSS,並且腳本不能與Chrome或Firefox一起運行。所以我回來尋找一個不需要重新編寫每個頁面的可靠解決方案。 Uggg,我希望iframes不是唯一的選擇。 – DougN 2010-09-18 18:14:28

2

Google對ifmail使用iframe方法。 Google的解決方案不會出錯。

-1

您還可以使用JQUERY加載方法。