`
alexwei
  • 浏览: 39715 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

js跨域调用

阅读更多
两个应用系统的页面之间需要用javascript交互,一般情况下比如子页面调用父页面的操作window.parent....这时会抛出一个javascirpt错误,提示没有权限。
实际这是浏览器禁止了javascript跨域访问。

今天测试了一下,发现如果在一个应用服务器下发布的两个应用,链接的url只是在路径上有不同,比如http://localhost:8080/proXX,这样的两个应用界面可以相互调用。

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

document.domain 的使用和需要注意的
在 JavaScript 中我们可以通过在页面中加入如下声明来强制指定页面所属的域。
<script language="JavaScript">
<!--
document.domain = "tb.com"; //指定 document 所属的域
-->
</script>
document.domain 属性是不可以随便设置的,它只能被设置为文件所属域的上级域。
只有当两个域存在相同的上级域时,才能通过指定 document.domain 来实现它们之间的数据交换,并且 document.domain 属性必须被 设置为二者的公共域。
并非所有的浏览器都支持对 document.domain 属性进行设置。如 MSIE 和 Netscape 它们4.0以前的版本是不支持对该属性的设置的;另外有趣的是虽然 Netscape 在4.0以后开始支持对 domain 进行设置了,但在4.03 和4.04两个版本中  Netscapre 居然又把上面的功能给取消了。

2、在服务器端设置代理(所谓的小偷程序)
跨域的请求同样发送到本地服务器端,由服务器端的代理来请求相应的数据,然后发送给浏览器端。这样实际上浏览器端的所有请求都是发到相同的域,在服务器端代理的帮助下,实现了跨域的能力。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics