残念ながら、コードと同じホスト/ドメイン内にない限り、iframeの便利なプロパティにアクセスすることはできません。これは、同一生成元ポリシーまたはクロスドメインポリシーと呼ばれる、現在のすべての価値のあるブラウザによって実装されるセキュリティ機能です。
サードパーティのiframeの変更を検出するための唯一のオプションは、サードパーティのコードが周囲のフレームへのメッセージの送信をサポートしているかどうかです。これを行うにはいくつかの方法がありますが、彼らはそれをサポートする必要があります。そうでなければ、あなたにできることはあまりありません。それが私だったら、私は以下をチェックします:
- サードパーティのドキュメントを読んで、それらがjsメッセージまたはイベントのトリガーをサポートしているかどうかを確認してください
- サードパーティのシステムが、iframe以外に、同じ機能を実装する別の方法を提供しているかどうかを確認してください。
スクリプトタグ?
追加できるメッセージに関して、そのメッセージにHTMLタグを追加できるかどうかをテストしましたか?可能性は低いですが、そうであれば、独自のスクリプトタグを追加してフレームに通信し、独自の関数(つまり、 `window.iframeSuccess`)をトリガーして、イベントが発生したことを通知できます...
次のコードは、両側が同じドメイン(外部フレームとiframe)にある場合にのみ機能します。それ以外の場合は、同一生成元ポリシーによってブロックされます。
<script>
if( window && window.parent && window.parent.iframeSuccess ){
window.parent.iframeSuccess();
}
</script>
代わりに、フレーム間の通信用に正確に設計された以下を実装できます。これはより現代的なソリューションなので、古いブラウザでは機能しません-それをサポートするものを確認するには、ここで読むことができます:
現在、window.postMessage呼び出しをサポートしているブラウザはどれですか?
使用方法の例window.postMessage
-最初に外枠のコード:
function messageListener(event){
/// make sure we only get messages from where we expect
if ( event.origin != "http://the-domain-we-expect-from.com" ){ return; }
/// here you can do what you want depending on the message you get
alert(event.data);
}
/// define for nearly every modern browser
if (window.addEventListener){
addEventListener("message", messageListener, false);
} else {
/// fallback for internet explorer
attachEvent("onmessage", messageListener);
}
次に、iframeに配置されたコード:
if( window && window.parent && window.parent.postMessage ){
window.parent.postMessage('success',
'http://the-domain-we-are-sending-to.com');
}
詳細については、こちらをご覧ください。
https://developer.mozilla.org/en-US/docs/DOM/window.postMessage
画像タグ?
スクリプトタグをブロックすると、画像タグが許可される可能性があります。この場合、サーバー側スクリプトに報告する画像を埋め込むという少しトリッキーなオプションを利用できます。これにより、データベースでイベントにフラグを立てることができます...
<img src="http://mysite.com/image-that-is-actually-a-script.php?id=user-id" />
ただし、JavaScriptにこのイベントを認識させるには、サーバー側のデータベースをjsから(ajaxまたはwebsocketを介して)常にチェックするある種のポーリングシステムが必要です。また、両方のユーザーを一意に識別できる必要があります。ある種のIDを持つサイド(あなたとサードパーティ) 。したがって、この方法は、サードパーティシステムがユーザーに表示されるメッセージにユーザーID (またはその他の一意のユーザー情報)を挿入できる場合にのみ実際に可能です。他に選択肢がない場合、これはほとんど最後のフォールバックです。