2

我希望能够从任何非安全页面安全地验证我网站上的用户。所以我做了一个window.open()弹出窗口来打开一个安全的登录表单。计划是在用户注册或验证后,弹出窗口将关闭,父窗口将刷新。

关闭弹出窗口工作正常,但是,由于跨站点脚本规则,当尝试刷新父级时,我得到以下信息:

Unsafe JavaScript attempt to access frame with URL http://localhost/ from frame with URL https://localhost/signin_popup. The frame requesting access has a protocol of 'https', the frame being accessed has a protocol of 'http'. Protocols must match.

我不能简单地在父级上订阅onunload,因为身份验证弹出窗口可能会在准备刷新父级之前遍历多个页面。我目前正在尝试查看是否可以将自定义事件绑定到父级的弹出窗口对象,并从弹出窗口中触发它们,但无济于事。

所以...

如何使弹出窗口与父窗口交互,或者在协议不匹配时让父窗口订阅弹出窗口的自定义事件?

4

1 回答 1

2

您应该能够使用-API实现跨域窗口通信postMessage

要将消息发布到另一个窗口:

otherWindowRef.postMessage( 'message', origin );

然后您将在另一个窗口中收到它:

window.addEventListener( "message", function() {
   //message was received 
}, false );

另一个窗口同样会.postMessage回到主窗口,并且主窗口会收到一个消息事件。

于 2012-11-26T19:42:23.430 回答