通过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,发现访问成功:
————————————————
版权声明:本文为CSDN博主「nju.拈花」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/nlznlz/article/details/79506655
————————————————
版权声明:本文为CSDN博主「nju.拈花」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/nlznlz/article/details/79506655