2

私はこのiframeを持っています:

<iframe id="website-overlay" src="link" onload="OverlayMostraCustomContenuto()"></iframe>

ただし、ロード時に次のようなエラーが発生した場合でも、この関数はロードされます。

Load denied by X-Frame-Options: http://www.youtube.com/watch?v=Q4cQsoz4mFA&feature=share does not permit cross-origin framing.

iframe が正しくロードされているかどうかを知る方法はありますか? Firebugがそれを捕まえることができれば、私はそう思います。

4

1 に答える 1

6

私の「解決策」はすべての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()
    }
}

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

于 2014-09-12T14:11:09.740 に答える