Javascript 为什么不';我能得到一个';同一原产地政策';使用谷歌地图API时发出警告?

Javascript 为什么不';我能得到一个';同一原产地政策';使用谷歌地图API时发出警告?,javascript,security,rest,google-maps,cross-domain,Javascript,Security,Rest,Google Maps,Cross Domain,我正在JavaScript页面中进行RESTful web服务调用,并收到以下警告: “此页面正在访问不受其控制的信息。这会带来安全风险。是否继续?” 现在我已经读了这篇文章,并且意识到了问题的严重性。然而,当我使用其他API(如Google的Maps API)时,我并没有收到这样的警告。显然,该域与我的本地域不同。有什么区别 我最初的猜测是,Google是使用标记“导入”到页面的,而我的REST消费使用的是XMLHttpRequest。如果是这样的话,这两种方法之间有什么区别,一种值得警告,另

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

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

现在我已经读了这篇文章,并且意识到了问题的严重性。然而,当我使用其他API(如Google的Maps API)时,我并没有收到这样的警告。显然,该域与我的本地域不同。有什么区别


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

下面可以解释一些事情:


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

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

本质上,在导入JavaScript时,您可以通过pages
标记注入代码。通过此标记导入的任何内容都会立即在全局上下文中执行。因此,与其传入JavaScript文件,不如传入一个URL到一个网站,该网站返回的页面不是HTML标记,而是返回JavaScript代码文本的页面,该文本在代码中调用回调

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

<script type="text/javascript" src="http://crossdomainhost/CrossDomainConsumerSite/Default.aspx?callback=myCallback&param1=myParam"></script>
在服务器端,您将在该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>

var myCallback=函数(myParam){
警报(“这是跨域调用的!”);
};

买一个像Fiddler2这样的工具,看看魔法这对我来说真的不管用。我试过了,但仍然在chrome和firefox中出现拒绝许可错误。@Merritt-您必须对其进行部分调试。如果您在web浏览器中浏览您的代理页面,是否会返回内容为JavaScript调用的文本?我上周对此进行了深入研究,发现实现这一点的唯一真正方法是使用JSONP。如果您可以让Web服务返回jsonp而不仅仅是json,那么您实际上可以相对轻松地完成这项工作。此代码项目显示了如何执行此操作:ttp://www.codeproject.com/KB/webservices/ASPNET_JSONP.aspx@梅里特-是的,这是正确的。对不起,我应该在回信中写出来的。我只是手动填充了JSON,因为它非常简单。看起来你是一个勇敢的灵魂,有正确的答案!谢谢最后一个帖子在:感谢你指出这一点。显然,他们的技术可以通过使用查询字符串参数使其在大多数情况下更加相关而变得更加有用。您的链接不再有效。虽然“一到邮件”组可以工作。有关可能的解决方法,请参阅Rook对的回答
<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>