【问题标题】:Javascript event dispached in a popup window that has been redirected在已重定向的弹出窗口中调度的 Javascript 事件
【发布时间】:2012-12-19 14:27:54
【问题描述】:

我有一个页面 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 的引用。 有谁知道解决这个问题的方法吗?

【问题讨论】:

  • 页面 C 与页面 A 是否在同一个域中?如果没有,则需要使用 postMessage 代替。

标签: javascript asp.net popup dom-events custom-events


【解决方案1】:

如果页面 C 和页面 A 在同一个域中,请尝试

window.opener.dispatchEvent(event);

如果没有,则需要使用 postMessage 代替,这意味着您必须将事件序列化为字符串并在页面 A 上侦听消息。

【讨论】:

  • 页面 C 在同一个域中,但是在页面 B 所做的事情中,还有一个重定向到另一个域的重定向到页面 C,因此对 opener 的引用丢失了。我认为我必须使用 postMessage,但是 Page A 仍然没有对 Page C 的引用,所以你能告诉我怎么做吗?
  • postMessage 将不起作用,除非您有对父窗口的引用。改用 window.parent。
  • 这个related question 可能会有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 2019-03-18
  • 2012-06-01
  • 2012-03-12
  • 1970-01-01
相关资源
最近更新 更多