12

当 Google 的 API 在您的网站上时,它如何向 Google 发出跨域请求?

4

5 回答 5

11

他们通过将脚本标签动态注入文档头部来绕过它。通过此注入向下发送的 javascript 中有一个回调函数,它告诉页面中运行的脚本它已加载和有效负载(数据)。

然后脚本可以删除动态注入的脚本标签并继续。

于 2008-09-24T18:54:22.790 回答
4

接受的答案是错误的。本是正确的。下面是使用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&amp;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

于 2013-03-02T02:27:34.003 回答
1

AFAIK 他们使用 IFRAME。

于 2008-09-24T18:51:33.873 回答
0

看起来谷歌使用 <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 或任何东西来获取它的地图,只是简单的图像,即时创建。因此,无需担心跨域问题...

于 2013-12-19T17:47:54.587 回答
0

另一种可能性是使用这里window.name为 dojo 框架描述的传输

于 2008-09-25T03:22:43.693 回答