【问题标题】:How to get access from cross-site popup to window.opener?如何从跨站点弹出窗口访问 window.opener?
【发布时间】:2011-12-29 19:07:15
【问题描述】:

我制作了一个小部件,我需要在弹出窗口中的特定事件之后将父窗口重定向到某个 url,基于另一个域。如何做到这一点。

window.opener.location.replace(url);

【问题讨论】:

  • 不安全的 javascript 尝试使用 url 访问框架))
  • 这听起来像是跨域脚本,将被安全限制阻止;还是我读错了问题?
  • 我想要kmow,我能解决这个限制吗?
  • 奇怪的是,它在 Firefox 中对我有用。你用的是哪个浏览器?

标签: javascript


【解决方案1】:

你不能那样做。大多数浏览器都不允许跨站点脚本。

但是,您可以通过此处描述的跨文档消息传递与另一个窗口进行通信:https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

你能做的最多的就是从弹出窗口向开启器发送一条消息,并在开启器中收听这样的消息。然后开瓶器必须自行更改其位置。

// popup:
window.opener.postMessage('replace your location', '*');

// opener:
window.onmessage = function (e) {
  if (e.data === 'replace your location') {
    window.location.replace(...);
  }
};

【讨论】:

  • 仅供参考,postMessage 在弹出窗口之间的 IE 中不起作用,即使在 IE10 中也是如此
  • 我的开瓶器应该在不同的域 www.mydomain.com 上。我想给他发一些敏感数据。我如何检查我的开启者是否真的是 www.mydomain.com?
  • window.opener 本身在我的情况下返回 null .. 那我将如何发布消息。
【解决方案2】:

在某些情况下可以这样做,但仅限于不同的子域,而不是完全不同的域。见Cross site scripting on the same domain, different sub domains

但由于postMessage() 在当前浏览器中广泛使用,您应该始终更喜欢postMessage(),正如@ian-kuca 所建议的那样。

【讨论】:

    猜你喜欢
    • 2011-03-27
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    相关资源
    最近更新 更多