在絕大多數的 Chrome 版本中,我們都會發現主要的更新和改善項目,包含產品、效能和網路平台功能。本文說明 Chrome 54 將於 9 月 15 日推出的 Beta 版淘汰和移除功能。這份清單隨時可能有所變動。
在卸載處理常式中停用導覽功能
TL;DR:window.onunload
事件處理常式將禁止所有跨來源瀏覽,也就是讓 Chrome 內嵌至 HTML 規格、Firefox 和 Safari。
意圖移除 | Chrome 狀態追蹤工具 | Chromium 錯誤
舊版 Chrome 允許在 window.onunload
內中斷跨來源瀏覽。只要設定 window.location.href = '#fragment'
即可。根據 HTML 規格,卸載處理常式僅允許使用網頁內瀏覽功能,而在舊版 Chrome 中,其他的導覽方法已根據規格加以封鎖。自 Chrome 54 版起,我們不得按照規格、Firefox 和 Safari 等瀏覽器導入這類瀏覽功能。
HTTP/0.9 已淘汰
TL;DR:HTTP/0.9 已淘汰。開發人員應升級至較新版本,建議使用 HTTP/2。
意圖移除 | Chrome 狀態追蹤工具 | Chromium 錯誤
HTTP/0.9 是 HTTP/1.x 的前身。但缺乏後續的許多特色。現代網路有一個問題,就是缺乏回應標頭。如果沒有 Cookie,就無法驗證 HTTP/0.9 回應是否確實是 HTTP/0.9 回應。這可能會造成一些問題。這類問題包括:
- 將特定錯誤回應視為有效 HTTP/0.9 回應的用戶端。
- 伺服器無法關閉要求通訊端,導致用戶端將回應視為等待的 GET,而該 GET 會永久留在線上,或直到使用者從提出要求的網頁開始瀏覽為止。
- 無法向瀏覽器指出要求失敗的伺服器,這可能導致快取經驗法則發生問題。
修正 HTTP/0.9 問題的唯一可證方法,就是完全移除支援。因此,Chrome 54 版不再支援 HTTP/0.9。
已移除使用 initTouchEvent
TL;DR:initTouchEvent
已淘汰,並改用 TouchEvent
constructor
以改善規格法規遵循,並將在 Chrome 54 版中完全移除。
意圖移除 | Chrome 狀態追蹤工具 | Chromium 錯誤
長期以來,開發人員都能夠使用 initTouchEvent
API,在 Chrome 中建立合成觸控事件。這些函式經常用於模擬觸控事件,以便測試或自動化網站中的部分 UI。自 Chrome 49 版起,這個已淘汰的 API 會顯示下列警告 。
除了屬於觸控事件規格外,還有許多原因都可能導致這項變更。Chrome 的 initTouchEvent
實作與 Safari 的 initTouchEvent
API 完全不相容,與 Android 裝置上的 Firefox 不同。最後,TouchEvent
建構函式變得更容易使用。
基於這些原因,我們決定遵循規格,而非維護既不受監護也與唯一實作相容的 API。需要替代方案的開發人員應使用 TouchEvent
建構函式。
由於 initTouchEvent
API 在 iOS 和 Android/Chrome 的實作方式差異甚大,網站通常會在以下幾行執行程式碼 (經常忘記 Firefox)
var event = document.createEvent('TouchEvent');
if(ua === 'Android') {
event.initTouchEvent(touchItem, touchItem, touchItem, "touchstart", window,
300, 300, 200, 200, false, false, false, false);
} else {
event.initTouchEvent("touchstart", false, false, window, 0, 300, 300, 200,
200, false, false, false, false, touches, targetTouches, changedTouches, 0, 0);
}
document.body.dispatchEvent(touchEvent);
這項淘汰作業只是在使用者代理程式和 Android 版 Chrome 中尋找「Android」,因此發生了同樣的問題。目前無法移除這個 API,因為 Android 上還會有其他採用 WebKit 及舊版 Blink 的瀏覽器,一段時間內仍需支援舊版 API。
如要正確處理網路上的 TouchEvent
,您應變更程式碼,以支援 Firefox、IE Edge 和 Chrome,方法是檢查 window
物件中是否存在 TouchEvent
,以及其長度是否為正「長度」(表示這是接受引數的建構函式)。
if('TouchEvent' in window && TouchEvent.length > 0) {
var touch = new Touch({
identifier: 42,
target: document.body,
clientX: 200,
clientY: 200,
screenX: 300,
screenY: 300,
pageX: 200,
pageY: 200,
radiusX: 5,
radiusY: 5
});
event = new TouchEvent("touchstart", {
cancelable: true,
bubbles: true,
touches: [touch],
targetTouches: [touch],
changedTouches: [touch]
});
}
else {
event = document.createEvent('TouchEvent');
if(ua === 'Android') {
event.initTouchEvent(touchItem, touchItem, touchItem, "touchstart", window,
300, 300, 200, 200, false, false, false, false);
} else {
event.initTouchEvent("touchstart", false, false, window, 0, 300, 300, 200,
200, false, false, false, false, touches, targetTouches,
changedTouches, 0, 0);
}
}
document.body.dispatchEvent(touchEvent);
已移除 KeyboardEvent.keyIdentifier 屬性
TL;DR:移除較少支援的 keyboardEvent.keyIdentifier
屬性,並改用標準式 KeyboardEvent.key
屬性。
意圖移除 | Chrome 狀態追蹤工具 | Chromium 錯誤
keyboardEvent.keyIdentifier
屬性在 2009 和 2010 年暫時是 W3C 規格的一部分。但這一次從未在 WebKit 中實作。
需要替換這項屬性的開發人員可以使用標準式 KeyboardEvent.key
屬性或 KeyboardEvent.code
屬性 (如我們上一次春季文章所述)。前者的實作基礎最高,支援所有主要電腦版瀏覽器 (Safari 除外)。目前版本目前支援 Chrome、Firefox 和 Opera。移除這項功能是為了提高 KeyboardEvent.key
資源採用率。Apple 不再提供相關支援這項功能,但也已淘汰 (但尚未從 Chrome 中移除) KeyboardEvent.keyCode
和 KeyboardEvent.charCode
屬性仍適用於 Safari。
移除 MediaStream 結束事件、屬性和生效屬性
重點摘要:ended
事件、屬性和 onended
事件處理常式已遭移除,因為這些處理常式已從媒體擷取和串流規格中移除。
意圖移除 | Chrome 狀態追蹤工具 | Chromium 錯誤
大約三年內,ended
事件和 onended
事件處理常式都未納入 WebRTC 規格。想要觀看事件的開發人員應使用 MediaStreamTracks
,而非 MediaStreams
。
淘汰 SVGElement.viewPort
自 2012 年起,Chrome 無法採用這項實作技術。其他瀏覽器中完全不會出現這個屬性,因此該屬性已從規格中移除。基於這些原因,屬性已遭淘汰。Chrome 55 預計會移除這項功能。
意圖移除 | Chrome 狀態追蹤工具 | Chromium 錯誤
淘汰 SVGViewElement.viewTarget
SVGViewElement.viewTarget
屬性不屬於 SVG2.0 規格,而且用量太小或不存在。這項屬性已在 Chrome 54 版中淘汰。Chrome 56 預計會移除這項功能。
意圖移除 | Chrome 狀態追蹤工具 | Chromium 錯誤
移除 SVGZoomEvent
SVGZoomEvent
不屬於 SVG2.0 規格的一部分,無法在 Chromium 中運作。但仍可偵測,可能會造成開發人員混淆。系統將移除這個位址。