5

我有一个页面 A 会打开一个到 B 的弹出窗口。页面 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 回答