在幾乎所有版本的 Chrome 中,我們都看到產品、效能和網路平台功能的更新和改善幅度相當顯著。本文將說明 Chrome 60 中已淘汰和移除的功能,該版本目前處於 Beta 版階段,並於 6 月 8 日推出。這份清單內容隨時可能有所變動。
安全性
crypto.subtle 現在需要安全的來源
自 Chrome 37 起就支援的 Web Crypto API 一向在非安全來源中運作。由於 Chrome 長期以來的政策是優先為安全的來源提供強大功能,因此 crypto.subtle
不僅會顯示在安全的來源上。
Intent to Remove | Chromium Bug
移除由內容啟動的頂層框架導覽至資料網址
由於非技術背景的瀏覽器使用者不熟悉這些字元,我們發現 data:
架構越來越常用於假冒和網路釣魚攻擊。為避免這種情況發生,我們會禁止網頁在頂端框架中載入 data:
網址。這項規定適用於 <a>
標記、window.open
、window.location
和類似機制。data:
配置仍可用於頁面載入的資源。
這項功能已在 Chrome 58 版淘汰,目前已移除。
Intent to Remove | Chromestatus Tracker | Chromium Bug
暫時停用部分 blob 的 navigator.sendBeacon()
navigator.sendBeacon()
函式自 Chrome 第 39 版起開放使用。如同最初實作時,函式的 data
引數可包含任何任意 Blob,其類型不屬於 CORS 安全清單。我們認為這是潛在的安全威脅,但目前尚未有人嘗試利用這項漏洞。由於我們暫時沒有合理的即時修正方式,因此 sendBeacon()
無法再針對類型不在 CORS 安全清單中的 Blob 叫用。
雖然這項異動已在 Chrome 60 中實施,但後來已合併回 Chrome 59。
CSS
讓陰影穿透式子項組合函式像子項組合函式一樣運作
陰影穿透子項組合函式 (>>>
) 是 CSS 範圍設定模組第 1 級 的一部分,旨在比對特定祖系元素的子項,即使這些子項出現在陰影樹狀結構中也一樣。這項方法有一定的限制。首先,根據規格,它只能用於 querySelector()
等 JavaScript 呼叫,無法在樣式表中使用。更重要的是,瀏覽器供應商無法讓這項功能在 Shadow DOM 的多個層級中運作。
因此,子項組合器已從相關規格 (包括 Shadow DOM v1) 中移除。我們選擇將陰影穿透式子項組合器別名為子項組合器,而不是從 Chromium 中移除這個選取器,以免導致網頁中斷。原始行為已在 Chrome 45 中淘汰。新行為已在 Chrome 61 版中實作。
Intent to Remove | Chromestatus Tracker | Chromium Bug
JavaScript
淘汰並移除 RTCPeerConnection.getStreamById()
getStreamById()
在近兩年前從 WebRTC 規格中移除。大多數其他瀏覽器已從其實作中移除此功能。雖然這項功能的使用率不高,但在 Edge 和 WebKit 瀏覽器 (除了 Safari,因為 Safari 仍支援 getStreamById()
) 中,也存在一些輕微的互通性風險。需要其他實作方式的開發人員,可以在下方的「移除意圖」中找到程式碼範例。
這項功能已在 Chrome 62 版中移除。
Intent to Remove | Chromestatus Tracker | Chromium Bug
淘汰 SVGPathElement.getPathSegAtLength
getPathSegAtLength()
已在兩年前從 SVG 規格中移除。由於 httparchive 中只有少數幾個命中此方法,因此已在 Chrome 60 中淘汰。我們預計在 10 月初或中旬推出的 Chrome 62 版中移除這項功能。
Intent to Deprecate | Chromestatus Tracker | Chromium Bug
將 getContextAttributes() 移至標記後方
自 2013 年起,CanvasRenderingContext2D
就支援 getContextAttributes()
函式。不過,這項功能並未納入任何標準,且自那時起也未納入任何標準。這項功能應已在 --enable-experimental-canvas-features
指令列旗標後方實作,但實際上並未實作。在 Chrome 60 中,這項疏失已修正。我們認為這項變更是安全的,因為沒有任何資料顯示有人使用該方法。
移除 Headers.prototype.getAll()
根據最新版的 Fetch 規格,Headers.prototype.getAll()
函式已遭到移除。
Intent to Remove | Chromestatus Tracker | Chromium Bug
移除 indexedDB.webkitGetDatabaseNames()
我們在 Chrome 中新增了這項功能,當時 Indexed DB 還算是新功能,而前置字串也相當熱門。API 會以非同步方式傳回來源中現有資料庫名稱的清單,這似乎相當合理。
很遺憾,這項設計有缺陷,因為結果可能在傳回後立即失效,因此只能用於記錄,而非嚴肅的應用程式邏輯。GitHub 問題追蹤/連結至先前討論的替代方案,這些方案需要採用不同的方法。雖然開發人員偶爾會對此感興趣,但由於跨瀏覽器的進度不足,程式庫作者已解決這個問題。
需要這項功能的開發人員必須自行開發解決方案。舉例來說,Dexie.js 等程式庫會使用全域資料表,而全域資料表本身就是另一個用來追蹤資料庫名稱的資料庫。
這項功能已在 Chrome 58 版淘汰,目前已移除。
Intent to Remove | Chromestatus Tracker | Chromium Bug
移除 WEBKIT_KEYFRAMES_RULE 和 WEBKIT_KEYFRAME_RULE
非標準的 WEBKIT_KEYFRAMES_RULE
和 WEBKIT_KEYFRAME_RULE
常數已從 CSS 規則中移除。開發人員應改用 KEYFRAMES_RULE
和 KEYFRAME_RULE
。
Intent to Remove | Chromestatus Tracker | Chromium Bug
使用者介面
要求使用者手勢才能顯示 beforeunload 對話方塊
從 Chrome 60 起,只有在嘗試顯示該對話方塊的框架收到使用者手勢或互動 (或任何嵌入式框架收到此類手勢) 時,才會顯示 beforeunload
對話方塊。請注意,這並不會變更 beforeunload
事件的調度作業。這只是變更對話方塊是否顯示。
beforeunload
對話方塊是應用程式模態對話方塊。因此,這類內容本質上不利於使用者,也就是說,這類內容會針對使用者導覽做出回應,質疑使用者的決定。這項功能也有正面用途。例如,當使用者在導覽時可能會遺失資料時,系統通常會發出警告。
雖然網頁提供 beforeunload
對話方塊的文字功能已在一段時間前移除,但 beforeunload
對話方塊仍是濫用行為的媒介。特別是 beforeunload
對話方塊是詐騙網站的元素,其中自動播放的音訊和威脅性文字會提供背景資訊,讓 Chromium 提供的「確定要離開這個網頁嗎?」訊息變得令人擔心。
我們希望能精準地執行這項政策,只允許妥善使用 beforeunload
對話方塊。使用對話方塊的好時機,是當使用者有可能遺失的狀態時。如果使用者從未與網頁互動,就不會有任何可能遺失的狀態,因此在這種情況下,我們可以抑制對話方塊,不會導致使用者資料遺失。