用document.domain解决Ajax跨子域

因为浏览器的安全策略,浏览器不允许不同域(比如:dancewithnet.com和lab.dancewithnet.com)、不同协议(比如:http://dancewithnet.com和https://dancewithnet.com)、不同端口(比如:http:dancewithnet.com和http://dancewithnet.com:8080)下的页面通过XMLHTTPRequest相互访问,这个问题同样影响着不同页面的Javascript的相互调用和控制,但是当主域、协议、端口相同时,通过设置页面的document.domain主域,Javascript可以在不同的子域名间访问控制,比如通过设置document.domain=’dancewithnet.com’,http://dancewithnet.com和http://lab.dancewithnet.com页面可互访,这个特性也提供了此情况下不同子域名下的XMLHTTPRequest相互访问的解决方案。

对于主域、协议、端口相同时的Ajax跨域问题,很早就有设置document.domain来解决的说法,但一直没有看到具体的成功应用,这几天尝试了一下,其原理就是,利用一个隐藏的iframe引入所跨另一子域的页面作为代理,通过Javascript来控制iframe引入的另一子域的XMLHTTPRequest来进行数据获取。请看实例>>

对于不同主域/不同协议/不同端口下的Ajax访问需要通过后台的代理来实现,更多细节可以看看Use a Web Proxy for Cross-Domain XMLHttpRequest CallsFixing AJAX: XMLHttpRequest Considered Harmful

标签:, ,

作者:秦歌,时间:2007-07-22 17:38,归纳于:Javascript & DOM & AJAX,订阅:RSS 2.0,引用:Trackback

有评论 6 条,发表一条评论 »

灼冰说:2007-07-25 17:06 #1

好久不写生活了……

火星人的fans说:2007-07-26 13:13 #2

嗯,而且还总写俺看不懂的东西

kakawar说:2007-08-08 20:03 #3

佩服佩服,长见识了。

火星人路人甲说:2007-11-06 14:12 #4

哎!!!!~~ 有现成的例子么 ,理论实在是太空洞了~~~~~~~

秦歌说:2007-11-06 16:21 #5

有例子啊,原文中有实例,看来我的链接做的不够明显,失败。

会做饭的仓鼠说:2007-11-07 9:10 #6

靠一百遍,ls的ls是傻鸟+瞎子,最烦这种cuo人了

发表一条评论

您可以在下面评论内容中使用下列XHTML标签:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

您或许也喜欢看:

  1. Ajax的小贴士
  2. 2006 Sun Tech Days China
  3. 紫竹院茶话
  4. WEB2.0概念诠释
  5. 从未出家门超过48小时说起
回到页眉