10

我的环境实际上不允许服务器端脚本(在服务器上“安装”脚本非常困难)。我尝试使用 iframe 来违反 javascript 的同源策略;然而,这并没有奏效。还有其他我不知道的解决方法吗?

谢谢!

4

2 回答 2

29

正如David Dorward提到的,JSON-P 是最简单和最快的;但是,还有另一个技巧,特别是使用两个 iframe。

两个在不使用 JSONP 的情况下解决此问题,您可以执行以下操作。此技术假定您对父页面具有某种开发访问权限。

两个域/站点上有三个页面。

  1. 父页面
  2. 内容页
  3. 跨域通信页面(又名“xdcomm”)

父页面和 xdcomm 页面托管在同一个域上,内容页面托管在任何其他域上。内容页面作为 iframe 嵌入到父页面中,而 xdcomm 页面作为隐藏的 iframe 嵌入到内容页面中。

在此处输入图像描述

xdcomm 页面包含一个非常简单的脚本,该脚本检测查询字符串中的 GET 参数,解析该字符串以获得methodargs变量(其中args是 JSON 编码的字符串),然后在父页面中使用指定的参数执行指定的方法。可以在这里看到一个例子(查看源代码)。

尽管 JavaScript 的同源策略限制了一个域上的代码访问另一个域的代码,但域是否相互嵌套并不重要(域 A,嵌套在域 B 中,嵌套在域 A 中)。

因此,简而言之,内容页面通过 xdcomm 页面将消息发送到父页面,方法是将 iframe 的源更改为http://domaina.com/xdcomm.html?src=foo&args=[1,2,3,4]. 这相当于foo(1,2,3,4)在父页面中执行。

另外,要知道已经有一些库可以帮助您解决这个问题,例如easyxdm。我在这里解释的是他们使用的一种技术的基础,虽然它可能不那么花哨,但它肯定是一个功能齐全且轻量级的实现。

于 2010-01-14T20:09:52.297 回答
2

希望不会,因为这将是一个安全漏洞!:)

但是,如果您的两个站点都是同一域上的子域,那么document.domain可能会有所帮助。

于 2010-01-14T19:43:52.470 回答