通过document.domain实现跨域访问

由于JavaScript同源策略的限制,脚本只能读取和所属文档来源相同的窗口和文档的属性。

对于已经有成熟产品体系的公司来说,不同的页面可能放在不同的服务器上,这些服务器域名不同,但是拥有相同的上级域名,比如id.qq.com、www.qq.com、user.qzone.qq.com,它们都有公共的上级域名qq.com。这些服务器上的页面之间的跨域访问可以通过document.domain来进行。

默认情况下,document.domain存放的是载入文档的服务器的主机名,可以手动设置这个属性,不过是有限制的,只能设置成当前域名或者上级的域名,并且必须要包含一个.号,也就是说不能直接设置成顶级域名。例如:id.qq.com,可以设置成qq.com,但是不能设置成com。

具有相同document.domain的页面,就相当于是处在同域名的服务器上,如果协议和端口号也是一致,那它们之间就可以跨域访问数据。

分享几个例子:

1. 访问同源页面:

打开https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cookie,在f12控制台里window.open页面:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers,访问返回的window对象的document属性,发现能够访问成功,如下图:

2. 访问协议、端口号一致,域名不一致,但具有相同上级域名的页面:

打开id.qq.com,f12打开控制台,window.open页面: www.qq.com,同样访问返回的window对象的document属性,发现访问失败,提示被阻止访问跨域的窗体:

这个时候分别打印id.qq.com的document.domain和www.qq.com的document.domain,发现前者是id.qq.com,而后者是qq.com,这时我们手动设置一下id.qq.com页面的document.domain,设置为qq.com,再次访问www.qq.com的window对象的document,发现访问成功:

 

 

  • 22
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值