我的「解決方案」沒有檢測到所有的iframe錯誤,但它確實「檢測到」您在無法控制的網站上提問的問題。
我在調用load()事件的iframe中有onload =「load()」。唯一的問題是即使加載失敗,也會調用此加載事件。我試過使用onerror =「error()」事件,但它永遠不會被調用。
這是一個有點哈克我知道,但我一直沒能更好地找到任何這樣的辦法解決這個我做到以下幾點:
當請求的iframe,我設置了iframeRequestTime以毫秒爲單位的地方在頁面上。當load()事件被調用時,我得到loadTime。然後我發現loadTime和requestTime之間的區別。如果請求被阻止,響應會很快,所以差異會很小。我已經設置好了,如果差異小於1000毫秒,我將刪除iframe並在新窗口中打開URL。我認爲,除非網站真的很小,否則除非你有非常快速的網絡連接,否則大多數網站在1000毫秒內不會完全加載。
function LoadIFrame(url) {
// Create & display iframe
var iframe = '<iframe src="' + url + '" onload="load()"></iframe>';
$('#iframeHolder').append(iframe);
// Time
var time = new Date().getTime();
$('#iframeHolder').attr('data-time', time);
}
function load() {
var requestTime = $('#iframeHolder').attr('data-time');
var loadTime = new Date().getTime();
var difference = loadTime - requestTime;
if (difference < 1000) {
var url = $('#iframeHolder iframe').attr('src');
window.open(url, '_blank');
$('#iframeHolder').empty()
}
}
通常我不會發布這樣一個hacky修復,但這個問題已經有一段時間了,現在沒有答案。很顯然,這個解決方案並不是一個完美的解決方案,但它很適合我網站的需求。任何建議|將受到歡迎。
我不理解你的解決方法。在任何情況下都會調用onload,那麼如何知道它是實際負載還是失敗負載?你能給我一個例子嗎? – markzzz
您添加'setTimeout'函數,然後將'load'事件監聽器添加到將清除超時的iframe。如果超時不會被清除,這意味着iframe無法在指定的時間加載=='錯誤'。 – matewka
對不起,我不明白。 setTimeout當我嘗試加載iframe,它會將一個負載處理程序添加到iframe?爲什麼它應該起作用?你能寫兩行代碼嗎? – markzzz