44

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

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

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

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

4

2 回答 2

7

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

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

于 2009-05-29T14:17:56.157 回答
1

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

<script>本质上,您在导入 JavaScript 时通过 pages 标签注入代码。通过此标记导入的任何内容都会立即在全局上下文中执行。因此,不要传递 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 等效项(使用您使用的任何服务器端语言)。OnLoad 将采用 URL 参数并重新调整它们以匹配上面的回调调用,而不是页面 HTML。

进行替换后,客户端加载页面时会立即调用回调。这样做的好处是'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>
于 2016-01-05T17:30:50.737 回答