瀏覽器悄悄廢棄了這個 JavaScript API,90% 開發(fā)者還在用
在Web開發(fā)的世界里,變化是常態(tài)。但有時候,一些我們習以為常的API會在不經(jīng)意間被標記為"廢棄",甚至在某些瀏覽器中被完全移除。今天我們要聊的,就是一個被廣泛使用卻已經(jīng)走向末路的JavaScript API——document.domain。
什么是document.domain?
document.domain 是一個看似簡單卻功能強大的屬性,它允許開發(fā)者修改當前文檔的域名。這個API最初的設(shè)計目的是為了解決跨子域通信的問題。
// 在 sub.example.com 頁面中
document.domain = 'example.com';
// 在 another.example.com 頁面中
document.domain = 'example.com';
// 現(xiàn)在兩個頁面可以相互訪問
為什么它如此受歡迎?
在Single Page Application(SPA)興起之前,許多大型網(wǎng)站都采用多子域架構(gòu):
- www.example.com - 主站
- api.example.com - API服務
- cdn.example.com - 靜態(tài)資源
- admin.example.com - 管理后臺
document.domain 為這些子域之間的通信提供了一個簡單的解決方案。無需復雜的postMessage機制,只需要設(shè)置相同的domain值,iframe和父頁面就能愉快地交互了。
廢棄的信號
(1) Chrome的動作
早在2020年,Chrome團隊就在其博客中宣布了計劃逐步廢棄document.domain。Chrome 106版本開始,這個API被標記為廢棄狀態(tài),并在控制臺中顯示警告信息:
Setting document.domain is deprecated and will be removed.
Please use postMessage() or Channel Messaging API instead.
(2) Firefox和Safari的跟進
Firefox在版本91中也開始顯示廢棄警告,而Safari則在版本15中加入了相同的警告機制。三大瀏覽器廠商的一致行動,標志著這個API的末日即將到來。
為什么要廢棄它?
(1) 安全風險
document.domain 的存在破壞了同源策略的完整性。惡意網(wǎng)站可能通過設(shè)置document.domain來繞過某些安全限制:
(2) 維護成本
瀏覽器廠商需要為這個特殊的API維護復雜的邏輯,包括:
- 域名驗證機制
- 跨域權(quán)限管理
- 與其他安全特性的兼容性
(3) 現(xiàn)代替代方案的成熟
現(xiàn)代Web平臺提供了更安全、更靈活的跨域通信方案:
- postMessage API
- Channel Messaging API
- CORS(跨域資源共享)
90%開發(fā)者仍在使用的現(xiàn)狀
根據(jù)GitHub代碼搜索和Stack Overflow的統(tǒng)計數(shù)據(jù),document.domain 的使用仍然非常廣泛:
(1) 遺留系統(tǒng)的困境
許多企業(yè)級應用仍然依賴這個API:
遷移指南
(1) 使用postMessage替代
(2) 使用Channel Messaging API
(3) CORS配置優(yōu)化
對于API調(diào)用,正確配置CORS頭:
// 服務端設(shè)置
Access-Control-Allow-Origin: https://trusted.example.com
Access-Control-Allow-Credentials: true
// 客戶端請求
fetch('https://api.example.com/data', {
credentials: 'include',
mode: 'cors'
});
document.domain 的廢棄標志著Web平臺向更安全、更規(guī)范方向的演進。雖然遷移過程可能面臨挑戰(zhàn),但這是必然趨勢。
不要等到瀏覽器完全移除支持才開始行動,與其在生產(chǎn)環(huán)境中遭遇突然的功能失效,不如提前做好準備,確保應用的穩(wěn)定性和未來兼容性。