document.domain
的作用是設定或獲取當前文件的域名。它主要用於在不同子域名下的頁面之間進行跨域通訊,也就是通常所說的同源策略的限制。
作用:
當兩個頁面的協議、埠和域名都相同時,它們被認為是同源的。不同源的頁面之間進行互動會受到瀏覽器的同源策略限制,例如無法透過 JavaScript 訪問對方的 DOM、Cookie 等。document.domain
可以用來部分地繞過這個限制。 具體來說,如果兩個子域名擁有相同的頂級域名,可以透過將它們的 document.domain
設定為相同的頂級域名來實現跨域通訊。
示例:
假設有兩個頁面:
a.example.com
b.example.com
這兩個頁面由於子域名不同,屬於不同源。 如果想要在這兩個頁面之間進行通訊,可以在這兩個頁面的 JavaScript 程式碼中都新增如下程式碼:
document.domain = 'example.com';
這樣,瀏覽器就會認為這兩個頁面同源,從而允許它們之間進行互動。
限制:
-
只能設定頂級域名:
document.domain
的值只能設定為當前域名的父域名,或者當前域名本身。不能設定為其他任意域名。例如,a.example.com
可以設定為example.com
,但不能設定為other.com
或b.example.com
。 -
必須是相同的頂級域名: 要進行通訊的兩個頁面必須擁有相同的頂級域名。例如,
a.example.com
和b.example.com
可以透過設定document.domain
來通訊,但a.example.com
和b.other.com
不行。 -
安全性問題: 修改
document.domain
會帶來一定的安全風險。如果其中一個子域名被攻擊者控制,攻擊者就可以透過設定document.domain
來訪問其他子域名的內容,從而竊取敏感資訊。因此,在使用document.domain
時需要格外小心,確保所有相關的子域名都處於可信任的環境中。 -
並非所有瀏覽器都支援: 雖然大多數現代瀏覽器都支援
document.domain
,但仍然可能存在一些相容性問題。在使用之前最好進行測試。
替代方案:
由於 document.domain
的限制和安全風險,現在更推薦使用其他更安全和更靈活的跨域通訊方案,例如:
- window.postMessage: 這是 HTML5 提供的一種跨域通訊機制,可以安全地在不同源的頁面之間傳遞訊息。
- CORS (Cross-Origin Resource Sharing): 這是一種基於 HTTP 頭的機制,允許伺服器指定哪些源可以訪問其資源。
總而言之,document.domain
是一種比較老的跨域通訊技術,有一定的侷限性和安全風險。在現代 Web 開發中,更推薦使用 window.postMessage
或 CORS 等更安全和更靈活的方案。