在幾乎每個 Chrome 版本中,我們都會看到大量更新和產品、效能和網路平台功能的改善。
Chrome 50 (Beta 版預計於 3 月 10 日至 17 日推出) 有許多變更。這份清單內容隨時可能有所變動。
在安全性不足的情況下淘汰 AppCache
重點摘要:為防範跨網站指令碼攻擊,我們會淘汰不安全來源的 AppCache。我們預期在 Chrome 52 中,這項功能只會在透過 HTTPS 提供內容的來源上運作。
Intent to Remove | Chromestatus 追蹤工具 | Chromium 錯誤
AppCache 是一項可讓您離線並持續存取來源的功能,這也是跨網站指令碼攻擊的強大權限提升機制。這是移除不安全來源上的強大功能的一部分。
Chrome 會透過只允許透過 HTTPS 進行驗證,移除這個攻擊媒介。我們會在 Chrome 50 中淘汰 HTTP 支援功能,並預計在 Chrome 52 中完全移除。
已移除 Document.defaultCharset
重點摘要:document.defaultCharset
已移除,以改善規格相容性。
Intent to Remove | Chromestatus Tracker | CRBug Issue
document.defaultCharset
已在 Chrome 49 中淘汰,這是一個唯讀屬性,可根據使用者的區域設定,傳回使用者系統的預設字元編碼。由於瀏覽器會使用 HTTP 回應或網頁中嵌入的中繼標記中的字元編碼資訊,因此我們發現維持這個值並無實用之處。
請改用 document.characterSet
取得 HTTP 標頭中指定的第一個值。如果沒有這個屬性,您會取得 <meta>
元素的 charset
屬性中指定的值 (例如 <meta
charset="utf-8">
)。最後,如果沒有這些值,document.characterSet
會是使用者的系統設定。
如要進一步瞭解為何不將此做為規格,請參閱這個 GitHub 問題。
已從連結元素中移除子資源屬性
重點摘要:移除 HTMLLinkElement
的 rel
屬性支援 subresource
值。
Intent to Remove | Chromestatus 追蹤工具 | Chromium 錯誤
<link> 上的 subresource
屬性意圖是在瀏覽器閒置期間預先載入資源。瀏覽器下載網頁後,即可預先下載其他網頁等資源,這樣當使用者要求時,系統就能直接從瀏覽器快取中擷取這些資源。
subresource
屬性有許多問題。首先,這項功能從未正常運作。系統以低優先順序下載參照的資源。除了 Chrome 以外,這項屬性從未在任何瀏覽器上實作。Chrome 實作項目有錯誤,導致資源下載兩次。
開發人員如要透過預先載入內容來改善使用者體驗,有許多選項可供選擇,其中最具可調整性的選項是建構服務 worker,以便善用預先快取和 Caches API。其他解決方案包括rel
屬性的其他值,包括 preconnect
、prefetch
、preload
和 prerender
。其中部分選項仍在實驗階段,可能不普遍支援。
移除不安全的 TLS 版本備用方案
TL;DR:移除強制伺服器使用較不安全或不安全的 TLS 版本傳回資料的機制。
Intent to Remove | Chromestatus 追蹤工具 | Chromium 錯誤
傳輸層安全標準 (TLS) 支援協商版本的機制,可讓您引入新的 TLS 版本,而不破壞相容性。部分伺服器實作這項功能的方式,會導致瀏覽器必須使用不安全的端點做為備用方案。因此,攻擊者可以強制任何網站 (不限於設定錯誤的網站) 協商使用較弱的 TLS 版本。
受影響的網站將無法連線至 ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION
。管理員應確保伺服器軟體為最新版本。如果問題仍未解決,請與伺服器軟體供應商聯絡,瞭解是否有修正程式可用。
移除 KeyboardEvent.prototype.keyLocation
TL;DR:移除 Keyboard.prototype.location
屬性的不必要別名。
Intent to Remove | Chromestatus 追蹤工具 | Chromium 錯誤
這項屬性只是 Keyboard.prototype.location
屬性的別名,可在鍵盤上多個位置的按鍵之間進行區分。舉例來說,這兩個屬性可讓開發人員區分擴充鍵盤上的兩個 Enter
鍵。
RTCPeerConnection 方法中需要的錯誤和成功處理常式
TL;DR:WebRTC 的 RTCPeerConnection 方法 createOffer()
和 createAnswer()
現在需要錯誤處理程序和成功處理程序。先前,您只能使用成功處理常式呼叫這些方法。這項用法已淘汰。
Intent to Remove | Chromestatus 追蹤工具 | Chromium 錯誤
在 Chrome 49 中,如果您在呼叫 setLocalDescription()
或 setRemoteDescription()
時未提供錯誤處理常式,系統會顯示警告。自 Chrome 50 起,錯誤處理常式引數為必填。
這項功能是為了清除在這些方法中導入承諾的路徑,符合 WebRTC 規格的要求。
以下是 WebRTC RTCPeerConnection 示範的範例 (main.js,第 126 行):
function onCreateOfferSuccess(desc) {
pc1.setLocalDescription(desc, function() {
onSetLocalSuccess(pc1);
}, onSetSessionDescriptionError);
pc2.setRemoteDescription(desc, function() {
onSetRemoteSuccess(pc2);
}, onSetSessionDescriptionError);
pc2.createAnswer(onCreateAnswerSuccess, onCreateSessionDescriptionError);
}
請注意,setLocalDescription()
和 setRemoteDescription()
都含有錯誤處理程序。舊版瀏覽器只會預期成功處理常式,如果有錯誤處理常式引數,則會直接忽略該引數;在舊版瀏覽器中呼叫此程式碼不會導致例外狀況。
一般來說,對於實際工作環境的 WebRTC 應用程式,我們建議您使用 adapter.js
,這是由 WebRTC 專案維護的墊片,可讓應用程式不受規格變更和前置字元差異的影響。
系統已不再支援 XMLHttpRequestProgressEvent
重點摘要:系統將移除 XMLHttpRequestProgressEvent
介面,以及 position
和 totalSize
屬性。
Intent to Remove | Chromestatus 追蹤工具 | Chromium 錯誤
這項事件的存在目的是支援 Gecko 相容性屬性 position
和 totalSize
。這三項功能在 Mozilla 22 中已遭到淘汰,且早已被 ProgressEvent
取代。
var progressBar = document.getElementById("p"),
client = new XMLHttpRequest()
client.open("GET", "magical-unicorns")
client.onprogress = function(pe) {
if(pe.lengthComputable) {
progressBar.max = pe.total
progressBar.value = pe.loaded
}
}
移除前置加密媒體擴充功能
重點摘要:我們已移除前置詞加密媒體擴充功能,改用以規格為準的無前置詞替代方案。
Intent to Remove | Chromestatus 追蹤工具 | Chromium 錯誤
在 Chrome 42 中,我們推出了以規格為準的加密媒體擴充功能,不含前置字串。這個 API 可用於探索、選取及與數位版權管理系統互動,以便與 HTMLMediaElement
搭配使用。
那是將近一年前的事。由於不含前置字串的版本比含前置字串的版本具備更多功能,因此是時候移除 API 的含前置字串版本了。
移除對 SVGElement.offset 屬性的支援
TL;DR:SVGElement 的偏移屬性已遭淘汰,改為使用 HTMLElement
上更廣泛支援的屬性。
Intent to Remove | Chromestatus 追蹤工具 | Chromium 錯誤
HTMLElement
和 SVGElement
長期以來都支援偏移屬性,但 Gecko 和 Edge 僅在 HTMLElement
上支援這些屬性。為提升瀏覽器之間的一致性,這些屬性已在 Chrome 48 中淘汰,並將在近期移除。
雖然等效屬性是 HTMLElement
的一部分,但開發人員如果想尋找替代方案,也可以使用 getBoundingClientRect()