我的环境实际上不允许服务器端脚本编写(在服务器上“安装”脚本极其困难)。我尝试使用 iframe 来违反 javascript 的同源策略;但是,那没有用。还有其他我不知道的解决方法吗?
谢谢!
最佳答案
作为David Dorward提到,JSON-P 是最简单和最快的;然而,还有另一个技巧,特别是使用两个 iframe。
两个不使用 JSONP 解决这个问题的方法是,您可以执行以下操作。此技术假定您对父页面具有某种开发访问权限。
两个域/站点上有三个页面。
- 父页面
- 内容页
- 跨域通信页面(又名“xdcomm”)
父页面和 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 的内容,通过 xdcomm 页面向父页面发送消息=[1,2,3,4]
。这相当于在父页面中执行 foo(1,2,3,4)
。
另外,要知道已经有库可以帮助您解决这个问题,例如 easyxdm .我在这里解释的是他们使用的一种技术的基础,虽然它可能不那么花哨,但它肯定是一个功能齐全且轻量级的实现。
关于javascript - 在没有服务器端脚本的情况下在 javascript 中绕过同源策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2067029/