我的环境实际上不允许服务器端脚本(在服务器上“安装”脚本非常困难)。我尝试使用iframe来违反javascript的同源起源;然而,这不起作用。还有其他我不知道的解决方法吗?
谢谢!
答案 0 :(得分:28)
如David Dorward所述,JSON-P是最简单,最快的;然而,还有另一个技巧,特别是使用两个iframe。
两个不使用JSONP解决此问题,您可以执行以下操作。此技术假定您对父页面具有某种开发访问权限。
两个域/网站上有三个页面。
父页面和xdcomm页面托管在同一个域中,内容页面托管在任何其他域上。内容页面作为iframe嵌入到父页面中,xdcomm页面作为隐藏的iframe嵌入到内容页面中。
xdcomm页面包含一个非常简单的脚本,用于检测查询字符串中的GET参数,解析method
和args
变量的字符串(其中args
是JSON编码的字符串),然后在父页面中使用指定的参数执行指定的方法。一个例子可以是seen here(查看来源)。
尽管JavaScript的同源策略限制一个域上的代码访问另一个域的代码,但域是否相互嵌套(域A,嵌套在域B中,嵌套在域A中)并不重要。
因此,简而言之,内容页面通过将iframe的来源更改为http://domaina.com/xdcomm.html?src=foo&args=[1,2,3,4]
之类的内容,通过xdcomm页面将消息发送到父页面。这相当于在父页面中执行foo(1,2,3,4)
。
此外,请知道已有图书馆可以帮助您解决此问题,例如easyxdm。我在这里解释的是他们使用的技术之一的基础,虽然它可能不那么花哨,但它肯定是一个功能齐全且轻量级的实现。
答案 1 :(得分:2)
希望不会,因为这将是一个安全漏洞! :)
但如果您的网站都是同一个域中的子域,那么document.domain可能会有所帮助。