document.domain解决跨域问题

document.domain解决跨域问题

我们在用跨域的时候。大部分都在知道哪些问题是跨域问题,也知道怎么解决。但是就是具体解决,或者说最终解决,都不理想,或者最终解决不了。咱们这做一下系统的说明。

跨域的几种情况,一般在哪出现。

  • 上传图片、文件。
  • 富文本编辑器,像我的KingEditor群里,经常会问到这个问题。
  • 页面直接请求第三方接口。
  • … … 。

解决方案,大部分人都会回答,document.domainjsonp  、 iframe  ,只是不知道具体怎么去解决。下面都来讲解一下,怎么使用和局限性。

重点来说一下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 即可。

————————————————

原文链接:https://blog.csdn.net/yuan_zhikong/article/details/76038222?spm=1001.2014.3001.550


原文始发于微信公众号(前端24):document.domain解决跨域问题

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/216870.html

(0)
李, 若俞的头像李, 若俞

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!