1. 程式人生 > >通過document.domain實現跨域訪問

通過document.domain實現跨域訪問

對於已經有成熟產品體系的公司來說,不同的頁面可能放在不同的伺服器上,這些伺服器域名不同,但是擁有相同的上級域名,比如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. 訪問同源頁面:

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,發現訪問成功:

3. 訪問協議、埠號不一致,域名不一致,但具有相同上級域名的頁面: