当 Google 的 API 在您的网站上时,它如何向 Google 发出跨域请求?
5 回答
他们通过将脚本标签动态注入文档头部来绕过它。通过此注入向下发送的 javascript 中有一个回调函数,它告诉页面中运行的脚本它已加载和有效负载(数据)。
然后脚本可以删除动态注入的脚本标签并继续。
接受的答案是错误的。本是正确的。下面是使用Google API JavaScript Client拉出页面的实际 iframe 节点。
<iframe name="oauth2relay678" id="oauth2relay678"
src="https://accounts.google.com/o/oauth2/postmessageRelay?
parent=https%3A%2F%2Fwww.example.com.au#rpctoken=12345&forcesecure=1"
style="width: 1px; height: 1px; position: absolute; left: -100px;">
</iframe>
它是如何工作的基本总结在这里:http ://ternarylabs.com/2011/03/27/secure-cross-domain-iframe-communication/ 。在现代浏览器上,他们使用 HTML postMessage 来实现通信,而在旧浏览器上,他们使用简洁的多 iframe-urlhash-read+write-combination hack。Ternary Labs 制作了一个库,可以将所有 hacky 的东西抽象出来,基本上可以在所有浏览器上为您提供 postMessage。
有一天,我会在这个库的基础上构建来简化跨域 REST API...
编辑:那一天已经到来,XDomain 就在这里 - https://github.com/jpillora/xdomain
AFAIK 他们使用 IFRAME。
看起来谷歌使用 <img> 标签显示地图我猜他们使用 JavaScrit 库来计算 src url 需要的所有坐标和其他参数,然后将 <img> 标签(以及一百万个其他标签)插入到你的 DOM。
完整的地图由几个窗格组成,如下面的 HTML:
<img src="https://mts1.google.com/vt/lyrs=m@248102691&hl=en&src=app&x=32741&s=&y=21991&z=16&scale=1.100000023841858&s=Galile" class="css-3d-layer" 风格="位置:绝对;左侧:573 像素;顶部:266 像素;宽度:128 像素;高度:128 像素;边框:0 像素;填充:0 像素;边距:0 像素;">
(您可以将此 HTML 粘贴到您自己的网页中以查看结果)
所以谷歌地图不使用 AJAX 或任何东西来获取它的地图,只是简单的图像,即时创建。因此,无需担心跨域问题...
另一种可能性是使用这里window.name
为 dojo 框架描述的传输