86

Knockout.jsiframeタグをバインドするために使用してsrcいます(これはユーザーに関して構成可能です)。

ここで、ユーザーがhttp://www.google.comを構成した場合(iframe に読み込まれないことがわかっているため、-ve シナリオで使用しています)、それを IFrame に表示する必要があります。しかし、それはエラーをスローします:-

「X-Frame-Options」が「SAMEORIGIN」に設定されているため、 「 http://www.google.co.in/ 」をフレームに表示することを拒否しました。

Iframe の次のコードがあります:-

<iframe class="iframe" id="iframe" data-bind="attr: {src: externalAppUrl, height: iframeheight}">
    <p>Hi, This website does not supports IFrame</p>
</iframe>

私が望むのは、URL の読み込みに失敗した場合です。カスタムメッセージを表示したい。 エラーが発生したときのコンソールのスクリーンショット ここでフィドル

ここで、onload と onerror を次のように使用すると:-

<iframe id="browse" style="width:100%;height:100%" onload="alert('Done')" onerror="alert('Failed')"></iframe>

w3schools.com の読み込みでは正常に動作しますが、google.com では動作しません。

第二に:-関数として作成し、フィドルで行ったように試しても機能しません。

<iframe id="browse" style="width:100%;height:100%" onload="load" onerror="error"></iframe>

実行してエラーをキャプチャする方法がわかりません。

編集済み:- iframe が読み込まれない場合、またはスタック オーバーフローでの質問を読み込む場合に、関数を呼び出したいのを見てきましたが、iframe に読み込むことができるサイトのエラーが表示されます。

また、ロードイベントでStackoverflow iframeを調べました ありがとう!!

4

9 に答える 9

15

loadiframe のイベントをバインドできると思います。iframe コンテンツが完全に読み込まれたときにイベントが発生します。

同時に setTimeout を開始できます。iFrame がロードされている場合は、タイムアウトをクリアするか、タイムアウトを発生させます。

コード:

var iframeError;

function change() {
    var url = $("#addr").val();
    $("#browse").attr("src", url);
    iframeError = setTimeout(error, 5000);
}

function load(e) {
    alert(e);
}

function error() {
    alert('error');
}

$(document).ready(function () {
    $('#browse').on('load', (function () {
        load('ok');
        clearTimeout(iframeError);
    }));

});

デモ: http://jsfiddle.net/IrvinDominin/QXc6P/

第二の問題

これは、インライン関数呼び出しでかっこを見逃しているためです。これを変更してみてください:

<iframe id="browse" style="width:100%;height:100%" onload="load" onerror="error"></iframe>

これに:

<iframe id="browse" style="width:100%;height:100%" onload="load('Done func');" onerror="error('failed function');"></iframe>

デモ: http://jsfiddle.net/IrvinDominin/ALBXR/4/

于 2013-08-31T20:57:51.840 に答える
10

onload は常にトリガーされます。この問題は try catch ブロックを使用するのが大好きです。contentDocument を取得しようとすると例外がスローされます。

iframe.onload = function(){
   var that = $(this)[0];
   try{
        that.contentDocument;
   }
   catch(err){
        //TODO 
   }
}
于 2017-08-04T11:05:06.767 に答える