我有一个不允许真正使用服务器端脚本的环境(很难在服务器上“安装”脚本)。我尝试使用iframe违反javascript的相同来源错误;但是,那没有用。还有其他我不知道的解决方法吗?
谢谢!
最佳答案
如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。我在这里解释的是他们使用的一种技术的基础,虽然可能不那么花哨,但它肯定是一个功能齐全且轻量级的实现。