javascript - 如何使用来自另一个域的脚本向父窗口发送消息?

标签 javascript messaging

我正在构建一项服务,您可以使用一行 JavaScript 代码将其植入您的网站 - 像 Facebook 一样思考 like button .

所以我将代码添加到 random.com,并且该代码是从 mysite.com/js.js 加载的。

如果用户未登录,出于安全考虑,我不想让他们通过 iframe 登录 - 我打开一个他们可以登录的窗口。当他们成功登录时,我需要获取父窗口一个新的XSRF token 。所以我需要能够告诉父窗口这样做。

我在 iframe 中使用它来执行其他操作,但是当我使用此代码从窗口尝试时:

window.parent.postMessage('message', '*');

没有任何反应。如果我将 * 更改为 random.com,我会收到此错误:

Unable to post message to http://random.com. Recipient has origin https://mysite.com

我认为必须如此,因为添加监听器的脚本:

$(window).bind('message', myfunction);

它实际上在 mysite.com 上的脚本中。

但奇怪的是,当 iframe 调用完全相同的脚本时,它会完美运行!并且 iframe 调用它时将 targetOrigin 设置为 random.com(这会导致上述安全错误)。

最佳答案

window.parent 仅适用于 iframe 而 window.opener 适用于单独的窗口。

最重要的是,因为我试图向父窗口发送消息,但是新窗口是由该窗口中的 iframe 打开的。

所以 window.opener 到达了 iframe - 然后我不得不将消息实际发送给它的父级:

window.opener.parent.postMessage(etc, etc);

关于javascript - 如何使用来自另一个域的脚本向父窗口发送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21068983/

相关文章:

windows - 如何通知 Windows 有关桌面设置的更改?

c# - 如何将异常消息转发到 Rebus 错误队列

javascript - 滑动电话图标时调用电话号码

javascript - react-router 链接调用 Redux Action

javascript - 使用 BreezeJS 获取 DateTime 类型的日期

javascript - 如何像谷歌一样在浏览器视口(viewport)中间居中div

javascript - jquery 按日期对非必填字段进行验证

messaging - ZeroMQ 准备好用于生产了吗?

android - 如何为使用Firestore和消息传递的Flutter Android项目修复Gradle错误

elasticsearch - 在Elasticsearch中存储聊天消息的最佳方法