5

Bへのポップアップを開くページAがあります。ページBは、いくつかのジョブの後、常にポップアップの別のページCにリダイレクトされます。次に、ページ C はイベントをディスパッチしてページ A にデータを送信しますが、ページ A はイベント ハンドラを登録するためのページ C への参照を持っていません。私が試したコードは、次のようなものです。

ページA:

function handler(e) {
    alert(e.detail.message);
}
var popup = window.open('/PageB.aspx');
popup.addEventListener("dispatch", handler, false);

ページ B:

location.href = "PageC.aspx";

ページ C:

var event = new CustomEvent(
        "dispatch",
        {
            detail: {
                message: "Test"
            },
            bubbles: true,
            cancelable: true
        }
    );

window.dispatchEvent(event);

しかし、リダイレクトすると PageA が PageC への参照を見逃すため、これは機能しません。これを修正する方法を知っている人はいますか?

4

1 に答える 1

1

ページ C がページ A と同じドメインにある場合は、

window.opener.dispatchEvent(event);

そうでない場合は、代わりに postMessage を使用する必要があります。つまり、イベントを文字列にシリアル化し、ページ A でメッセージをリッスンする必要があります。

于 2012-12-19T14:49:28.983 に答える