私の「解決策」はすべての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()
}
}
通常、私はそのようなハッキーな修正を投稿しませんでしたが、この質問はしばらくの間ここにあり、回答はありません. 明らかに、このソリューションは完全な修正ではありませんが、私のサイトのニーズには十分に適合しています。どんな提案も歓迎します。