document.domain解决跨域问题,详细讲解
2017-07-24 21:19
435 查看
我们在用跨域的时候。大部分都在知道哪些问题是跨域问题,也知道怎么解决。但是就是具体解决,或者说最终解决,都不理想,或者最终解决不了。咱们这做一下系统的说明。
上传图片、文件。
富文本编辑器,像我的KingEditor群里,经常会问到这个问题。
页面直接请求第三方接口。
... ... 。
解决方案,大部分人都会回答,document.domain 、 jsonp 、 iframe ,只是不知道具体怎么去解决。下面都来讲解一下,怎么使用和局限性。
关于 JSONP ,只能解决接口调用的问题。具体这里不做讲解,详情请看我另外一篇博客:JSONP
的工作原理,JSONP Demo讲解
跨域了,然后去访问原来域的内容,就会这样。因为域不一样,导致访问失败。怎么解决呢。
像上面是可以的,因为 一级域名 都是
像上面是不可以的,因为 一级域名 都不一致,这个情况下,会报错:
规则说明了,那么下面来说怎么解决吧,当然要结合 Iframe 。
比如我们要在当前页面下,
在请求
然后在上传的地址
这样上传就是在相同的域下了,有的人是少了第一步,其实仔细想想,正所谓跨域,就是指你使用功能的时候,当前域和使用的域不一样,所以要在前面就指定就可以了。故保证一致。
一级域名 有的人叫根域名,如:sojson.com、baidu.com、sina.com、sina.com.cn、sina.cn.net
等等。
二级域名 是指增加了一级,包括www。如:
三级、四级一直下去,照理推下去就明白了,腾讯和新浪很多这样的域名,甚至有5-6级的。都是用qq.com。这里想说一个什么事情呢,就是上面讲解的说要一级域名一致,其实严格来说是父域名一致。
举个栗子:
跨域的几种情况,一般在哪出现。
上传图片、文件。富文本编辑器,像我的KingEditor群里,经常会问到这个问题。
页面直接请求第三方接口。
... ... 。
解决方案,大部分人都会回答,document.domain 、 jsonp 、 iframe ,只是不知道具体怎么去解决。下面都来讲解一下,怎么使用和局限性。
关于 JSONP ,只能解决接口调用的问题。具体这里不做讲解,详情请看我另外一篇博客:JSONP
的工作原理,JSONP Demo讲解
重点来说一下document.domain 。一般出现这些问题。
Error: Permission denied to access property xxxx
跨域了,然后去访问原来域的内容,就会这样。因为域不一样,导致访问失败。怎么解决呢。
首先用document.domain来指定域,是可以的,但是有局限性,也就是一级域名一致才可以。如下:
www.sojson.com下指到
sojson.com是可以的。
icp.sojson.com下指到
sojson.com是可以的。
像上面是可以的,因为 一级域名 都是
sojson.com。
www.sojson.com下指到
www.baidu.com是不行的。
sojson.com指到
baidu.com还是不行的。
像上面是不可以的,因为 一级域名 都不一致,这个情况下,会报错:
NS_ERROR_DOM_BAD_DOCUMENT_DOMAIN: Illegal document.domain value
规则说明了,那么下面来说怎么解决吧,当然要结合 Iframe 。
需求:
比如我们要在当前页面下,“www.sojson.com/shiro”下上传图片到
"cdn.sojson.com/images/"下去。直接搞肯定是不行的。
解决:
在请求“www.sojson.com/shiro”的时候,写上如下代码:
if(document.domain !='sojson.com'){
document.domain = 'sojson.com';
}
然后在上传的地址
“cdn.sojson.com”的
Iframe文件内写上一样的代码。
if(document.domain !='sojson.com'){
document.domain = 'sojson.com';
}
这样上传就是在相同的域下了,有的人是少了第一步,其实仔细想想,正所谓跨域,就是指你使用功能的时候,当前域和使用的域不一样,所以要在前面就指定就可以了。故保证一致。
ps:这里额外补充一下,能懂就懂,不懂也没事。
一级域名 有的人叫根域名,如:sojson.com、baidu.com、sina.com、sina.com.cn、sina.cn.net等等。
二级域名 是指增加了一级,包括www。如:
www.sojson.com、icp.sojson.com、zhidao.baidu.com、www.baidu.com等等。有人把www.sojson.com叫一级域名这是错误的。
三级、四级一直下去,照理推下去就明白了,腾讯和新浪很多这样的域名,甚至有5-6级的。都是用qq.com。这里想说一个什么事情呢,就是上面讲解的说要一级域名一致,其实严格来说是父域名一致。
举个栗子:
abc.www.baidu.com和
cdf.www.baidu.com他们就都可以
document.domain指定到
www.baidu.com即可。
相关文章推荐
- 通过document.domain + iframe解决跨域问题
- document.domain解决跨域问题
- document.domain解决跨域问题
- 关于document.domain解决跨域问题
- document.domain 跨域问题【转】
- document.domain与js跨域的问题
- document.domain 跨域问题
- document.domain 跨域问题【转】
- document.domain 跨域问题
- Flash/ActionScript 解决跨域问题的策略文件crossdomain.xml的写法
- document.domain解决跨域
- document.domain 跨域问题
- document.domain 跨域问题引发的血案
- document.domain 跨域问题【转】
- document.domain 跨域问题
- [ Silverlight]crossdomain.xml 解决 Silverlight 跨域访问的问题
- 跨域问题实践总结! 上(JSONP/document.domain/window.name)
- js报错,document.domain跨域问题
- document.domain 跨域问题
- document.domain 跨域问题