iframe 内でカスタム イベントを発生させ、それを親ドキュメントから検出するのに問題があります。iframe と親ドキュメントのオリジンは同じです (同じプロトコル、同じホスト、同じポート)。
何かアドバイスはありますか?
iframe 内でカスタム イベントを発生させ、それを親ドキュメントから検出するのに問題があります。iframe と親ドキュメントのオリジンは同じです (同じプロトコル、同じホスト、同じポート)。
何かアドバイスはありますか?
私は同様の問題に遭遇し、以前window.postMessage
は解決していました。
現在、API は文字列の受け渡しのみをサポートしていますが、ソリューションを変更すると強力になる可能性があります。詳細はこちら
ソースページから (iframe によって消費されている):
postMessage API は 2 つのパラメーター - message 、 target を想定 しています。
元:window.parent.postMessage("HELLO_PARENT", 'http://parent.com');
親ページから (iframe を含む。例: Container):
通常どおりイベントリスナーを追加します
window.addEventListener('message', handleMessage, false);
event.origin check を使用して関数を定義します (セキュリティのため) \
function handleMessage(event) {
if (event.origin != "http://child.com") { return; }
switch(event.data) {
case "HELLO_PARENT":
alert("Hello Child");
break;
}
}
これは機能します:
parent.$('body').trigger('eventName');
iframe内でトリガーされたイベントは、親ドキュメントで検出されます。
同じドメインとクロスドメインの両方の iframe をサポートする一貫した答えは、イベント システムを使用することです。
目標は、カスタム イベントを iframe から親に送信することです。
iframe ソース ファイル内:
var myCustomData = { foo: 'bar' }
var event = new CustomEvent('myEvent', { detail: myCustomData })
window.parent.document.dispatchEvent(event)
そして、iframe を含む親ファイルにこれを追加します。
window.document.addEventListener('myEvent', handleEvent, false)
function handleEvent(e) {
console.log(e.detail) // outputs: {foo: 'bar'}
}