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

NiL*_*iLL 14 javascript

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

window.opener.location.replace(url);
Run Code Online (Sandbox Code Playgroud)

J. *_* K. 31

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

但是,您可以通过此处描述的跨文档消息传递与其他窗口进行通信: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(...);
  }
};
Run Code Online (Sandbox Code Playgroud)

  • FYI postMessage在弹出窗口之间的IE中不起作用,即使在IE10中也是如此 (3认同)