在没有服务器端脚本的情况下,在JavaScript中获取相同的源策
我有一个不允许服务器端脚本的环境(要在服务器上安装脚本是非常困难的)。 我试图使用iframe来违反JavaScript的同一起源poilcy; 但是,这并没有奏效。 有没有其他解决方法我不知道?
谢谢!
正如David Dorward所说,JSON-P是最简单,最快速的; 然而,还有另一个窍门,特别是使用两个iframe。
两个解决这个问题,而不使用JSONP,你可以做到以下几点。 这种技术假定你有某种对父页面的开发访问权限。
在两个域/网站上有三个页面。
- 父页面
- 内容页面
- 跨域通信页面(又名“xdcomm”)
父页面和xdcomm页面托pipe在同一个域上,内容页面托pipe在任何其他域上。 内容页面作为iframeembedded在父页面中,并且xdcomm页面作为隐藏的iframeembedded在内容页面中。
xdcomm页面包含一个非常简单的脚本,用于检测查询string中的GET参数,parsingmethod
和args
variables(其中args
是JSON编码的string)的string,然后使用父页面中指定的参数执行指定的方法。 一个例子可以在这里看到 (查看源代码)。
即使JavaScript的“相同原点策略”限制一个域上的代码访问另一个域上的代码,但域之间是否嵌套(域A,嵌套在域B中,嵌套在域A内)并不重要。
所以,简而言之,内容页面通过xdcomm页面将消息发送到父页面,方法是将iframe的源代码更改为http://domaina.com/xdcomm.html?src=foo&args=[1,2,3,4]
。 这相当于在父页面中执行foo(1,2,3,4)
。
另外,知道已经有一些库可以帮助你,比如easyxdm 。 我在这里解释的是他们使用的技术之一的基础,虽然它可能不像花式,但它当然是一个function齐全,轻量级的实现。
希望不会,因为这将是一个安全漏洞! 🙂
但是,如果您的网站都在同一个域上的子域名,也许document.domain可以帮助。