代码之家  ›  专栏  ›  技术社区  ›  Parris

不使用服务器端脚本在javascript中绕过同源策略

  •  9
  • Parris  · 技术社区  · 16 年前

    我的环境实际上不允许服务器端脚本(在服务器上“安装”脚本非常困难)。我尝试使用iframe来违反javascript的同源原则;然而,这不起作用。还有其他我不知道的解决办法吗?

    谢谢

    2 回复  |  直到 16 年前
        1
  •  29
  •   Community Mohan Dere    9 年前

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

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

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

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

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

    enter image description here

    method args 变量(其中 args seen here (查看源代码)。

    尽管JavaScript的同源策略限制一个域上的代码访问另一个域上的代码,但域之间是否嵌套(域A、域B中嵌套、域A中嵌套)并不重要。

    因此,简而言之,内容页通过xdcomm页将iframe的源更改为 http://domaina.com/xdcomm.html?src=foo&args=[1,2,3,4] . 这相当于执行 foo(1,2,3,4) 在父页面中。

    另外,要知道已经有一些库可以帮助您实现这一点,例如 easyxdm . 我在这里解释的是他们使用的其中一种技术的基础,虽然它可能没有想象的那么奇特,但它确实是一个功能齐全的轻量级实现。

        2
  •  2
  •   Pekka    16 年前

    希望不会,因为这将是一个安全漏洞!:)

    但是如果你的两个站点都是同一个域上的子域,可能 document.domain