现在的位置: 首页 > 综合 > 正文

Js 跨域调用问题,大家一起研究一下……

2013年09月08日 ⁄ 综合 ⁄ 共 1428字 ⁄ 字号 评论关闭

各位大侠:

   最近遇到了 javascript 跨域调用问题

   我在这种父子页面需要返回值的页面上使用 window.opener.document.getElementById().value的时候,页面会报错,告诉我拒绝访问。父子页面属于不同的站点。郁闷ing……

   在网络上搜了一下,江湖传言如下:

Javascript出于安全性考虑,是不允许跨域调用其他页面的对象的。因此也就导致了在一些ajax应用中,使用跨域的web service成为问题。

在多数情况下,只有同一个域内的页面才能交互作用。比如,一个位于 www.microsoft.com/ 域中的页面可以自由地通过脚本影响 www.microsoft.com/ 域中的其他页面,但却不能作用于其他网域中的页面。

DHTML对象模型用 document.domain 属性来强制约束:只有拥有相同 domain 属性的页面能够自由地相互作用。(包括URL协议也必须相同,比如HTTP页面不可以与HTTPS的内容交互作用。)

当网页作者指定 document.domain 属性为域名的后半部分时,读写许可将可以扩展至二级域名(second-level domain )。例如:[microsoft.com] 上的一个页面可以把 document.domain 属性由初始的“www.microsoft.com”改为“microsoft.com”,就可以读写 home.microsoft.com 上的页面,或者以 microsoft.com 结尾的所有其他域中的页面,只要那些页面的 document.domain 属性值也设置为 microsoft.com 。因为只有名字以 microsoft.com 结尾的站点上的文档才能设置其 document.domain 属性为 microsoft.com ,所以确保了只有同一个服务提供者的页面才能互相提供权限并交互操作。document.domain 属性值不能比二级域名更短(比如“com”),因为这样会使权限超越于单一的服务提供者。比如:一个国际域名 www.microsoft.co.jp/ ,最大的操作权限是二级域名"microsoft.co.jp"(而不是"co.jp")。

这里整理了一些方法,来解决这个问题:

1.设置document.domain。
前提条件:两个页面同属于一个基础域(例如都是xxx.com,或是xxx.com.cn);同一协议(例如都是http);同一端口(例如都是80)。
方法:设置两个页面的document.domain都设置为自己所在的基础域名。
例子:aaa.xxx.com里面的一个页面需要调用bbb.xxx.com里的一个对象,则将两个页面的document.domain都设置为xxx.com,就可以了。

2.在服务器端设置代理
跨域的请求同样发送到本地服务器端,由服务器端的代理来请求相应的数据,然后发送给浏览器端。这样实际上浏览器端的所有请求都是发到相同的域,在服务器端代理的帮助下,实现了跨域的能力。

3.使用apache服务器的mod_rewrite

http://doc.99net.net/doc/service/1076303865/1076476868.html

4.这边还有一个方法

http://johnvey.com/features/deliciousdirector/web-service-broker.html

哪位大侠有比较牛的解决方案,快点跟贴!!

 

 

抱歉!评论已关闭.