我正在JavaScript页面中进行RESTful Web服务调用,并收到以下警告:
“此页面正在访问不受其控制的信息。这会带来安全风险。您要继续吗?”
现在我已经阅读了这篇文章,并且知道cross-domain, same origin policy。但是,当我使用Google的Maps API等其他API时,我不会收到此类警告。显然,域名与我的本地域名不同。有什么不同?
我最初的猜测是,当我使用XMLHttpRequest时,使用<script>
标记将Google“导入”到页面中。如果是这样的话,这两种方法之间的区别是哪一种值得警告而另一种不值得?
答案 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¶m1=myParam"></script>
在服务器端,您将在该URL上创建一个覆盖OnLoad等效项的站点(使用您使用的任何服务器端语言)。而不是页面HTML,OnLoad将获取URL参数并重新调整它们以匹配上面的回调调用。
当进行替换时,在客户端加载页面时立即调用回调。这样做的好处是'src'URL不必与托管页面的域匹配。
以下是客户端HTML页面最后的样子:
myCallback( myParam );