为什么在使用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¶m1=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¶m=myParam></script>