Javascript 如何使用不同的协议(HTTP与HTTPS)在弹出窗口上侦听事件?

Javascript 如何使用不同的协议(HTTP与HTTPS)在弹出窗口上侦听事件?,javascript,events,authentication,protocols,Javascript,Events,Authentication,Protocols,我希望能够从任何非安全页面安全地验证我网站上的用户。因此,我制作了一个window.open()弹出窗口来打开一个安全登录表单。计划是,在用户注册或验证后,弹出窗口将关闭,父窗口将刷新 关闭弹出窗口可以正常工作,但是,由于跨站点脚本规则,在尝试刷新父级时,我得到以下结果: Unsafe JavaScript attempt to access frame with URL http://localhost/ from frame with URL https://localhost/signin

我希望能够从任何非安全页面安全地验证我网站上的用户。因此,我制作了一个
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
,因为身份验证弹出窗口在准备刷新父级之前可能会遍历多个页面。我目前正在尝试查看是否可以从父对象将自定义事件绑定到弹出窗口对象,并从弹出窗口中激发它们,但没有效果

所以


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

您应该能够与

要将消息发布到其他窗口,请执行以下操作:

otherWindowRef.postMessage( 'message', origin );
window.addEventListener( "message", function() {
   //message was received 
}, false );
然后,您将在另一个窗口中收到:

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

另一个窗口同样将
.postMessage
返回到主窗口,主窗口将获得消息事件。

您不能。这是一个安全限制,用于防止不安全或未知的网站通过javascript注入获取敏感信息。如果可能的话,你想要做的行为类型正是黑帽子用来恶意收集信息的行为。@JoelEtherton我可以看出这与发送数据有关,但为什么不能监听事件触发?你能从一开始就将匿名web请求重定向到https吗?因此,当弹出窗口被触发时,父窗口也将是https。@Miguel-F很乐意这样做,不幸的是,我们的网站在https上运行时没有很好的基准测试
https
http
在感谢的眼里是完全不同的起源,我可能实际上无法实现这一点,因为我们的绝大多数用户都没有使用兼容HTML5的浏览器,但这绝对是值得学习的!似乎这对未来的用户来说也是一个合适的答案,所以很可能会接受这个答案