为什么在使用Google地图API时不能获得“相同来源策略”警告?

我正在JavaScript页面中进行REST风格的Web服务调用,并得到以下警告:

“这个页面正在访问不受其控制的信息,这会带来安全风险,你想继续吗?”

现在我已经读到了这一点,并意识到跨域,相同的来源政策 。 但是,当我使用Google的Maps API等其他API时,我不会收到这样的警告。 显然,域名与我的本地域名不一样。 有什么不同?

我最初的猜测是,当我的REST消费使用XMLHttpRequest时,Google使用<script>标签“导​​入”页面。 如果是这样的话,这两种方法有什么区别,值得警惕,另一方面呢?

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

此外,他们使用一些脚本hack(例如插入一个脚本到DOM获取请求的数据,而不是XHR)。

我想总结一下解决这个问题的方法。 你可以在这里find一个有用的url。

从本质上讲,当你导入JavaScript时,你通过页面<script>标签注入代码。 通过这个标签导入的任何东西都会在全局上下文中立即执行。 因此,不是传入JavaScript文件,而是将url传递给网站,该网站返回的不是HTML标记的网页,而是返回JavaScript代码文本的页面,该代码文本在您的代码中调用callback。

您可以使用URL参数来告诉页面返回什么样的“callback”以及需要进入callback的任何参数。 例如:

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

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

 myCallback( myParam ); 

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

当进行replace时,客户端加载页面时立即调用callback。 这样做的好处是“src”URL不必与托pipe页面的域匹配。

以下是客户端HTML页面的结尾:

 <script type="text/javascript"> var myCallback = function( myParam ) { alert( "this was called across domains!" ); }; </script> <script type="text/javascript" src="http://crossdomainhost/CrossDomainConsumerSite/Default.aspx?callback=myCallback&param=myParam></script>