我正在创建一个小部件,我需要将一个父窗口重定向到某个URL,在弹出窗口中的特定事件之后,基于另一个域。如何做到这一点。
window.opener.location.replace(url);
答案 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所暗示的那样。