使用Google Maps API时,为什么我没有收到“相同的原始政策”警告?

时间:2009-05-29 14:01:22

标签: javascript security rest google-maps cross-domain

我正在JavaScript页面中进行RESTful Web服务调用,并收到以下警告:

“此页面正在访问不受其控制的信息。这会带来安全风险。您要继续吗?”

现在我已经阅读了这篇文章,并且知道cross-domain, same origin policy。但是,当我使用Google的Maps API等其他API时,我不会收到此类警告。显然,域名与我的本地域名不同。有什么不同?

我最初的猜测是,当我使用XMLHttpRequest时,使用<script>标记将Google“导入”到页面中。如果是这样的话,这两种方法之间的区别是哪一种值得警告而另一种不值得?

2 个答案:

答案 0 :(得分:6)

以下可能解释的事情: http://markmail.org/message/5wrphjwmo365pajy

此外,他们使用了一些脚本黑客(例如,将脚本插入DOM以获取请求的数据,而不是XHR)。

答案 1 :(得分:1)

我想总结解决这个问题的方法。您可以找到有用的网址here

基本上,您在导入JavaScript时通过页面pugImg标记注入代码。通过此标记导入的任何内容都会立即在全局上下文中执行。因此,不是传入JavaScript文件,而是将URL传递给返回不是HTML标记的页面的网站,而是返回一个返回代码中调用回调的JavaScript代码文本的页面。

使用URL参数告诉页面要返回的“回调”以及需要进入回调的所有参数。例如:

<script>

评估此内容时,'src'参数返回的页面内容为:

<script type="text/javascript" src="http://crossdomainhost/CrossDomainConsumerSite/Default.aspx?callback=myCallback&param1=myParam"></script>

在服务器端,您将在该URL上创建一个覆盖OnLoad等效项的站点(使用您使用的任何服务器端语言)。而不是页面HTML,OnLoad将获取URL参数并重新调整它们以匹配上面的回调调用。

当进行替换时,在客户端加载页面时立即调用回调。这样做的好处是'src'URL不必与托管页面的域匹配。

以下是客户端HTML页面最后的样子:

myCallback( myParam );