关于javaScript跨域交互
2011-04-12 17:47 rocdu 阅读(375) 评论(0) 编辑 收藏 举报总是有人会问关于跨域的问题,优优同学之前有篇关于此题的大作,内容详实。发扬拿来主义,转到这里。
一,什么是跨域?1,完全跨域
根域名不同的跨域,如sohu.com/index.html和sina.com/index.html便是完全跨域
2,跨子域名
根域名相同,但是子域名不同,如mdc.sohu.com/index.html和cms5.sohu.com/index.html
两种特殊情况
即使页面不跨域,js交互也会受到影响。
1,不同端口
根域名一致,但是端口不一致,如sohu.com/index.html和sohu.com:1234/index.html
2,不同协议
根域名一致,但是安全协议不一致,如http://sohu.com/index.html和https://sohu.com/index.html
二,什么时候会发生跨域?如果解决跨域的JS交互问题?
假设页面A和B是跨域的页面,那末下面两种情况会发生跨域问题
1,页面A从B获取json、script等非dom元素的数据
解决办法:利用jquery框架中的$.getJSON和$.geScript。后台技术也可解决此类问题,不在此话题内便不扯了…
2,页面A获取B的dom元素或JS方法和变量(简称DOM交互)
典型的一个应用就是iframe和frame的使用。拿iframe举个例子即:
页面A内有一个iframe,该iframe引用了页面B,即iframe.src=”B”.
这种情况,
如果A和B不跨域,
在JS里面A和B是可以互相交互的,可以互相读取对方的dom元素、公有函数、属性等等,例如,
在页面A内,可以通过window.frames["iframeName"].document来访问页面B的document对象;
在页面B内,可以通过parent引用页面A内的各种属性或者方法如parent.p1,parent.hello().
如果A和B跨域
对于完全跨域的情况,页面A和B是无法通过JS进行DOM交互的。
对于跨子域的情况,默认情况下也无法DOM交互。但是可以通过指定document.domain的值为根域名来解决。即A和B页面中,head标签内加入
<script type=”text/javascript”>document.domain=”A和B的根域名”;</script>
对于端口不一样和协议不一样的两种情况,参考mozilla开发中心的文档说明,页面A和B应该也是无法通过JS进行dom的交互的!