javascript - 在没有服务器端脚本的情况下在 javascript 中绕过同源策略

标签 javascript cross-domain same-origin-policy

我的环境实际上不允许服务器端脚本编写(在服务器上“安装”脚本极其困难)。我尝试使用 iframe 来违反 javascript 的同源策略;但是,那没有用。还有其他我不知道的解决方法吗?

谢谢!

最佳答案

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

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

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

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

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

enter image description here

xdcomm 页面包含一个非常简单的脚本,用于检测查询字符串中的 GET 参数,为 methodargs 变量解析该字符串(其中 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/

相关文章:

javascript - 未捕获的语法错误 : Unexpected token <

cordova - 在 Cordova 5.0.0 中禁用同源策略

javascript - 同源策略,外部脚本

javascript - 更改浏览器中的 URL 而不使用 JavaScript 加载新页面

javascript - Node.js Promise 函数在返回前卡住执行

javascript - 使用 Javascript/jQuery 删除字符串中的反斜杠

javascript - 来自本地文件的 Ajax 请求

javascript - JQuery Undefined 不是一个函数

javascript - 如何将子框架中的location.href更改为相对路径?

javascript - 同源 CPU 密集型 iframe 的单独事件循环