web-dev-qa-db-ja.com

クロスドメインiframeコンテンツの負荷検出

私はかなり興味深い問題を抱えています。ダイアログ内にiframeが含まれているモーダルjqueryダイアログを作成する親ページがあります。 iframeには、サードパーティドメインのコンテンツが入力されます。私の問題は、iframeのコンテンツが正常に読み込まれたかどうか、および5秒以内に読み込まれなかったかどうかを検出できるダイアログレベルのJavaScriptを作成してから、ダイアログを閉じてユーザーを親ページに戻す必要があることです。

私は数多くの解決策を研究してきましたが、真に価値のあるものは2つだけです。

  1. リモートサイトにdocument.domain = 'our-domain.com'のjavascript行を含めるようにします。
  2. URLフラグメントハックを使用しますが、URLの末尾に「#some_value」を追加してURLを変更できるようにリモートサイトにリクエストする必要があります。ダイアログウィンドウでは、URLが表示されるまで、またはURLをポーリングする必要があります。タイムアウトします。

正直なところ、これらは私が使用しなければならない唯一のオプションですか?これを検出する簡単な方法はありませんか?

Http応答エラーをポーリングする方法があるかどうかを調査してきましたが、これは依然として同じ制限に限定されています。

どんな助けでも大歓迎です。

ありがとう

15
rik_davis

最も簡単な方法(外部サイトにコードを追加できる場合)は、ドメイン上の特別なhtmlファイルを指す非表示のiframeを追加することです。次に、parent.parent.foo()を使用して、ロードイベントについて元のウィンドウに通知できます。

「load」イベントをリッスンすると、ウィンドウがロードされたかどうかだけがわかり、何がロードされたか、またはドキュメントが対話の準備ができているかどうかはわかりません。

10
Sean Kinsey

Nicholas Zakasに、iframeが読み込まれたかどうかの検出に関する記事があります: http://www.nczonline.net/blog/2009/09/15/iframes-onload-and-documentdomain/ 。基本的に、次のコードスニペットがあります。

_var iframe = document.createElement("iframe");
iframe.src = "simpleinner.htm";

if (iframe.attachEvent){
    iframe.attachEvent("onload", function(){
        alert("Local iframe is now loaded.");
    });
} else {
    iframe.onload = function(){
        alert("Local iframe is now loaded.");
    };
}

document.body.appendChild(iframe);
_

私はそれをテストしていませんが、jQueryは$("#iframe").load(function () { alert("Local iframe is now loaded."); });のようなことをすることでそれを処理できるはずだと確信しています。

3
juandopazo

フレーム間の通信に postMessage を使用してみてください。
これには、リモートサイトに、読み込みが完了したときに親ドキュメントにメッセージを投稿するための特定のJavaScriptを含める必要があります。

2
Dror

これは、iframe自体のonloadハンドラーを使用して行うことができます。残念ながら(驚きです!)IEは困難です。これを機能させる唯一の方法は、iframe用のHTMLを作成し、それをinnerHTMLでドキュメントに追加することでした。次に、iframeがDOMに表示されるタイミングを確認するためにポーリングする必要があります。これは、ページが読み込まれているかどうかによって異なります。ソースへのリンクは次のとおりです。 http://svn.openlaszlo.org/openlaszlo/trunk/ lps/contains/source/iframemanager.js

create()__finishCreate()およびgotload()を参照してください。これをコピーして、自分で使用してください。

よろしく、Max Carlson OpenLaszlo.org

1
Max Carlson