【问题标题】:window.opener is null after redirect重定向后 window.opener 为空
【发布时间】:2011-10-30 12:52:11
【问题描述】:

我正在使用window.open() 从父母那里打开一个贝宝窗口。付款并重定向回我的页面(在弹出窗口中)后,我想关闭弹出窗口并更新父窗口 URL。

我发现这适用于 window.opener.location。

但是控制台显示

window.opener.location 为空

重定向后,因为随着子窗口的变化,弹出窗口会丢失有关打开器的信息。

很好。现在有什么办法可以解决这个问题吗?也许为监听孩子 URL 的父母添加一种“监听器”?

【问题讨论】:

  • 您尝试从哪个 URL 访问 window.opener - 它与开启者在同一个域中吗?我不确定,但我认为 opener 属性应该在重定向中持续存在
  • 嘿 Pekka,是的,弹出窗口中的最终 url 与开启者具有相同的域。但是:当窗口打开时,它会直接转到 Paypal(顺便说一下 https)。也许我可以在中间有我域中的另一个页面?
  • 是的,效果很好!我只是在两者之间放置了另一个重定向页面。现在弹出窗口首先:到我的域上的页面,第二:到 PayPal,第三:回到我的域。这样它不会丢失父信息。伟大的人谢谢!
  • 这在 IE 中有效吗?我也这样做,第一步和第三步我在同一个域但不同的页面上,它在 IE 中不起作用,但在 chrome 和 firefox 中起作用。

标签: javascript window.open


【解决方案1】:

在 IE 中使用 window.opener 的问题是当您使用 localhost 站点和诸如 paypal 之类的 Internet 站点时。只需将本地主机的位置从本地 Intranet 更改为 Internet 区域,opener 就不会为空。

【讨论】:

    【解决方案2】:

    首先,您可以在父窗口中设置一个计时器功能,以检查子窗口是否以特定时间间隔(例如 100 毫秒左右)打开或关闭。如果它已关闭,那么您可以重新加载父窗口。

    【讨论】:

    • 很好的方法,但是父母在失去“孩子”信息后无法再检查孩子。这就是问题所在......
    • 只有当子窗口关闭时,父级才会失去对子级的控制,否则父级将拥有对它的控制权。所以这个方法可以成立。试试看你会发现你需要的
    【解决方案3】:

    window.opener 会在您导航到不同的主机时被删除(出于安全原因),无法绕过它。如果可能的话,唯一的选择应该是在一个框架内付款。顶部文档需要保留在同一主机上。

    【讨论】:

    • 它在导航到不同的主机时被删除,但是当您导航回 same 主机时它不应该可用(根据同源策略)吗?还是永远失去了?
    • 浏览器将其设置为null,之后它不会费心恢复它。对于与安全相关的事情,最简单的方法通常是最好的方法,否则你可能会遇到竞争条件。
    • 他们是怎么做到的? ximon.nl/…(你不用付钱,但我告诉你他们关闭窗口并刷新父级的 url);-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 2016-06-07
    • 2021-05-18
    相关资源
    最近更新 更多