2010-09-13 45 views
18

我有一個其他網站可以包含,因此他們的用戶可以將POST表單返回到我的網站。我想優雅地處理我的網站已關閉或我的服務器無法提供內容(即響應超時或4xx或5xx錯誤)的情況。我嘗試添加一個onError到對象,但似乎並沒有做任何事情:如何處理加載iframe中的錯誤?

showIFrame = function() { 
    var iframe = document.createElement('iframe'); 
    iframe.id = 'myIFrame'; 
    iframe.src = 'http://myserver.com/someURLThatFailsToLoad'; 
    iframe.onError = iframe.onerror = myHandler; 
    document.body.appendChild(iframe); 
}; 

myHandler = function(error) { 
    document.getElementById('myIFrame').style.display = 'none'; 
    console.error('Error loading iframe contents: ' + error); 
    return true; 
}; 

如果我的服務器返回一個404我剛剛得到的未找到網頁的內容在我的。事實上,這個錯誤處理程序並沒有被觸發。有沒有辦法做到這一點?

(目前我測試Chrome瀏覽器,但我想它也爲FF工作和IE> = 7)

回答

12

爲了檢測服務器是否已關閉或沒有,你可以包括空腳本文件來自你自己的域名。當服務器發生故障時,onerror事件處理程序將火:

var el = document.createElement('script'); 
el.onerror = errorFunction; 
el.src = "somebogusscript.js?" + new Date().getTime(); 
document.body.appendChild(el); 

注意:不要忘了一個隨機字符串添加到src屬性使用緩存的版本,以避免客戶端(可以停止看看在所有的服務器)。

+1

對不起 - 好點,雖然我已經佔了這一點。查看更新:'iframe.onError = iframe.onerror = myHandler;' – 2010-09-13 23:19:02

+0

大多數瀏覽器不允許跨域的XHR請求。這是我提供給其他網站的Javascript。事實上,XHR HTTP的跨域限制正是我在這裏使用'