在幾乎每個版本的 Chrome 中,我們都會看到產品、效能以及網路平台的大量更新和改善項目。
Chrome 50 (預估 Beta 版發布日期:3 月 10 日至 17 日) 中,Chrome 有許多變更。這份清單隨時可能變更。
在安全性不足的情況下淘汰 AppCache
重點摘要:為防範跨網站指令碼攻擊,我們會淘汰不安全來源的 AppCache。我們預期在 Chrome 52 中,這項功能只會在透過 HTTPS 提供內容的來源上運作。
Intent to Remove | Chromestatus 追蹤工具 | Chromium 錯誤
AppCache 是一項可讓您離線並持續存取來源的功能,這也是跨網站指令碼攻擊的強大權限提升機制。這是移除不安全來源上的強大功能的一部分。
Chrome 會透過只允許透過 HTTPS 進行驗證,移除這個攻擊媒介。我們即將淘汰 Chrome 50 的 HTTP 支援,並預計在 Chrome 52 中完全移除。
已移除 Document.defaultCharset
重點摘要:document.defaultCharset
已移除,以改善規格相容性。
移除意圖 | Chrome 狀態追蹤工具 | CRBug 問題
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 實作項目有錯誤,導致資源下載兩次。
開發人員如要透過預先載入內容來改善使用者體驗,可以選擇多種選項,最靈活的特色就是建構服務工作站,以運用預先快取和 Caches API。其他解決方案包括rel
屬性的其他值,包括 preconnect
、prefetch
、preload
和 prerender
。其中部分選項屬於實驗功能,且可能不受廣泛支援。
移除不安全的 TLS 版本備用方案
TL;DR:移除強制伺服器使用較不安全或不安全的 TLS 版本傳回資料的機制。
意圖移除意圖 | Chrome 狀態追蹤工具 | Chromium 錯誤
傳輸層安全標準 (TLS) 支援協商版本的機制,可讓您引入新的 TLS 版本,而不破壞相容性。有些伺服器實作此做法,使瀏覽器必須使用不安全的端點做為備用端點。因此,攻擊者可以強制「任何」網站,而不只是設定錯誤的網站,以協商使用較弱的 TLS。
受影響的網站將無法連線至 ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION
。管理員應確保伺服器軟體為最新版本。如果問題仍未解決,請與伺服器軟體供應商聯絡,瞭解是否有修正程式可用。
移除 KeyboardEvent.prototype.keyLocation
TL;DR:移除 Keyboard.prototype.location
屬性的不必要別名。
意圖移除意圖 | Chrome 狀態追蹤工具 | 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
}
}
移除附帶前置字串的 Encrypted Media Extensions
重點摘要:已移除前置詞加密媒體擴充功能,改用以規格為準的無前置詞替代方案。
意圖移除意圖 | Chrome 狀態追蹤工具 | 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()