文件:domain 屬性

已棄用:此特性不再推薦。雖然某些瀏覽器可能仍然支援它,但它可能已經從相關的網路標準中刪除,可能正在刪除過程中,或者可能僅為相容性目的而保留。請避免使用它,如果可能,請更新現有程式碼;請參閱本頁底部的相容性表格以指導您的決策。請注意,此特性可能隨時停止工作。

Document 介面的 domain 屬性獲取/設定當前文件來源(origin)的域部分,該域用於同源策略

字串。

異常

SecurityError DOMException

文件禁止設定其域,例如,它處於沙盒中或具有不透明的來源。詳情請參閱“失敗”部分

示例

獲取域

對於在 URL https://mdn.club.tw/en-US/docs/Web 執行的程式碼,此示例會將 currentDomain 設定為字串 "developer.mozilla.org"

js
const currentDomain = document.domain;

此屬性的 getter 返回當前文件來源的域部分。在大多數情況下,這將是文件 URL 的主機名部分。但是,也有一些例外情況:

  • 如果頁面具有不透明的來源,例如,對於具有資料 URL 的頁面,則它將返回空字串。
  • 如果使用了 document.domain setter,則它將返回已設定的值。

儘管 getter 不像 setter 那樣危險,但使用 Location.hostname 屬性可能更簡單和更有用。這樣你就可以完全避免使用 document.domain

js
const currentHostname = location.hostname;

對於 URL https://mdn.club.tw/en-US/docs/WebcurrentHostname 也是字串 "developer.mozilla.org"。其他提供略微不同資訊的替代方案是 Location.host(包含埠)和 Window.origin(提供完整來源)。

設定域

js
document.domain = domainString;

此屬性的 setter 可用於更改頁面的來源,從而修改某些安全檢查的執行方式。它只能設定為相同或父域。例如,如果 https://a.example.comhttps://b.example.com 都使用

js
document.domain = "example.com";

那麼它們都修改了它們的來源以具有相同的域,並且它們現在可以直接訪問彼此的 DOM——儘管是跨域的,這通常會阻止此類訪問。

請注意,將 document.domain 設定為其當前值並非空操作。它仍然會更改來源。例如,如果一個頁面設定了

js
document.domain = document.domain;

那麼它將被視為與任何其他未進行相同操作的正常同源頁面跨源。

廢棄

document.domain setter 已廢棄。它破壞了同源策略提供的安全保護,並使瀏覽器中的來源模型複雜化,導致互操作性問題和安全漏洞。

嘗試設定 document.domain 是危險的。它開放了從所有子域對頁面 DOM 的完全訪問許可權,這可能不是預期行為。它還會從來源中移除埠元件,因此現在您的頁面可以被具有相同 IP 地址或相同主機元件的其他頁面訪問,即使在不同的埠上。

這在共享主機上尤其不安全。例如,另一個共享主機客戶可以在相同的 IP 地址但在不同的埠上託管一個站點,然後設定 document.domain 將移除通常保護您免受該其他客戶站點訪問您的站點資料的同源保護。

共享主機站點給每個客戶一個不同的子域時也會出現類似問題。如果一個站點設定了 document.domain,任何其他子域上的客戶現在都可以做同樣的事情,並開始訪問原始站點的資料。

您不應使用 document.domain 來促進跨域通訊,而應使用 Window.postMessage 向其他來源傳送非同步訊息。這種透過訊息傳遞進行的受控訪問比 document.domain 導致的所有資料全面暴露要安全得多。

失敗

在以下幾種情況下,setter 將丟擲 SecurityError DOMException