Facebook的“赞”按钮如何具有跨域访问权限,可以将HTML添加到父窗口

How does Facebook's Like Button have cross-domain access to add HTML to the parent window?

本文关键字:权限 HTML 窗口 添加 访问权 访问 按钮 何具 Facebook      更新时间:2023-09-26

免责声明:我将尽力解释我所追求的内容,但我对跨域策略的了解非常有限。我已经搜索了Stack,但如果有一个答案我错过了,请告诉我。

我们在网站上实施了标准的Facebook喜欢/发送按钮。LikeSend按钮位于指向 facebook.com 的 iFrame 中。

当您单击Send按钮时,HTML将作为Facebook iFrame的同级(即我们的DOM)附加

我想知道的是FB如何在不违反跨域政策的情况下将HTML添加到我们网站上的div中。

这是我的小提琴。若要查看发生的情况,请在单击"Send"的同时检查 DOM。

感谢@CBroe指出我的答案:

通过 Mozilla

window.postMessage是一种安全启用跨源通信的方法。通常,仅当且仅当执行它们的页面位于具有相同协议(通常均为http),端口号(80是http的默认值)和主机(两个页面将modulo document.domain设置为相同值)的位置时,才允许不同页面上的脚本相互访问。window.postMessage 提供了一种受控机制,以正确使用时安全的方式规避此限制。

因为你用javascript添加发送按钮,而不是iframe。Iframe 在您的页面加载/刚加载后生成。

由于这个原因,脚本能够访问你和 Iframe 的内容和 DOM 元素并对其进行编辑。正如您所知道和提到的,无论如何,iframe 都无法访问它的父级。