如何从跨站点弹出窗口访问window.opener?

时间:2011-11-15 18:44:30

标签: javascript

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

window.opener.location.replace(url);

2 个答案:

答案 0 :(得分:29)

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

但是,您可以通过此处描述的跨文档消息与其他窗口进行通信:https://developer.mozilla.org/en/DOM/window.postMessage

你可以做的最多是从弹出窗口向开启者发送消息,并在开启者中监听这样的消息。然后,揭幕战必须自己改变位置。

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

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

答案 1 :(得分:0)

在某些情况下,可以这样做,但只能使用不同的子域,而不是完全不同的域。请参阅Cross site scripting on the same domain, different sub domains

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