为啥我在使用 Google Maps API 时没有收到“同源政策”警告?

Posted

技术标签:

【中文标题】为啥我在使用 Google Maps API 时没有收到“同源政策”警告?【英文标题】:Why don't I get a 'same origin policy' warning when using the Google Maps API?为什么我在使用 Google Maps API 时没有收到“同源政策”警告? 【发布时间】:2010-10-29 21:28:27 【问题描述】:

我正在我的 javascript 页面中调用 RESTful Web 服务并收到以下警告:

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

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

我最初的猜测是 Google 是使用 <script> 标记“导入”到页面中的,而我的 REST 消费使用的是 XMLHttpRequest。如果是这种情况,这两种方法有什么区别,一种值得警告,另一种不值得?

【问题讨论】:

获取Fiddler2之类的工具,看魔术 这对我来说真的不起作用。我试过了,在 chrome 和 firefox 中仍然出现拒绝权限错误。 @Merritt - 你必须部分调试它。如果您在网络浏览器中浏览到您的代理页面,您是否会返回内容是 JavaScript 调用的文本? 上周我对此进行了广泛研究,发现实现这一目标的唯一真正方法是使用 JSONP。如果您可以让 web 服务返回 jsonp 而不仅仅是 json,那么您实际上可以相对轻松地完成此操作。此代码项目显示了如何执行此操作:ttp://www.codeproject.com/KB/webservices/ASPNET_JSONP.aspx @Merritt - 是的,这是正确的。对不起,我应该在我的回复中提出。我只是手动填充了 JSON,因为它非常简单。 【参考方案1】:

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

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

【讨论】:

看起来你是一个有正确答案的勇敢灵魂!谢谢!最后一个帖子在:teamlalala.com/blog/2009/04/14/… 感谢您指出这一点。显然,他们的技术可以通过采用查询字符串参数使其在大多数情况下更相关,从而变得更加有用。 您的链接不再有效。虽然一个邮件组有效。 有关可能的解决方法,请参阅 Rook 对***.com/questions/1131210/…的回答【参考方案2】:

我想总结一下这个问题的解决方案。您可以找到有用的 URL here。

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

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

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

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

myCallback( myParam );

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

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

这是客户端 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>

【讨论】:

以上是关于为啥我在使用 Google Maps API 时没有收到“同源政策”警告?的主要内容,如果未能解决你的问题,请参考以下文章

Google Location API vs. Maps:为啥相同的查询会产生不同的结果?

为啥我不能在函数中返回计算出的距离(来自 Google Maps API)? [复制]

为啥我的 Google Maps API 请求在服务器上运行时不起作用

为啥google apis显示不同的结果?

Google Maps Javascript API、DirectionsService、国家列表

Google Maps API门牌号码未显示