在幾乎每個 Chrome 版本中,我們都會看到產品、效能和 Web 平台功能有大量更新和改良。本文說明 Chrome 54 (9 月 15 日推出 Beta 版) 中淘汰和移除的項目。這份清單隨時可能有所變動。
在卸載處理常式中停用導覽
TL;DR:為使 Chrome 與 HTML 規格以及 Firefox 和 Safari 保持一致,系統將禁止 window.onunload 事件處理常式中的所有跨來源導覽。
移除意圖 | Chromestatus 追蹤工具 | Chromium 錯誤
舊版 Chrome 允許在 window.onunload 中中斷跨原始來源導覽作業。設定 window.location.href = '#fragment'。根據 HTML 規格,卸載處理常式只允許網頁內導覽,而 Chrome 先前版本會根據規格封鎖其他導覽方法。自 Chrome 54 起,這類導覽將不允許,以符合規格以及 Firefox 和 Safari 的做法。
HTTP/0.9 已淘汰
重點摘要:HTTP/0.9 已淘汰。開發人員應改用較新版本,最好是 HTTP/2。
移除意圖 | Chromestatus 追蹤工具 | Chromium 錯誤
HTTP/0.9 是 HTTP/1.x 的前身。因此缺少後續機型具備的許多功能。現代網路的一大問題是缺少回應標頭。如果沒有這些標頭,就無法驗證 HTTP/0.9 回應是否真的是 HTTP/0.9 回應。這可能會導致多項問題。例如:
- 將特定錯誤回應視為有效 HTTP/0.9 回應的用戶端。
- 伺服器無法關閉要求 Socket,導致用戶端將回應視為懸而未決的 GET,這類要求會無限期保持有效,或直到使用者離開發出要求的網頁為止。
- 伺服器無法向瀏覽器指出要求失敗,這可能會導致快取啟發式演算法發生問題。
如要徹底解決 HTTP/0.9 的問題,唯一方法是完全移除支援功能。因此,Chrome 54 版已移除對 HTTP/0.9 的支援。
已移除「initTouchEvent」的使用權
TL;DR:
initTouchEvent
已淘汰,並改用
TouchEvent
constructor,以提升
規格相容性,並將在 Chrome 54 中完全移除。
移除意圖 | Chromestatus 追蹤工具 | Chromium 錯誤
長期以來,開發人員都能在 Chrome 中使用 initTouchEvent API 建立合成觸控事件。這些事件通常用於模擬觸控事件,以測試或自動化網站中的某些 UI。自 Chrome 49 起,這個已淘汰的 API 會顯示下列警告。
TouchEvent.initTouchEvent 已淘汰,並將於 2016 年 9 月左右的 M53 版本中移除。請改用 TouchEvent 建構函式。詳情請參閱
https://www.chromestatus.com/features/5730982598541312。
除了不符合觸控事件規格外,這項變更還有許多優點。Chrome 實作的 initTouchEvent 完全不相容於 Safari 的 initTouchEvent API,也與 Android 版 Firefox 不同。最後,TouchEvent 建構函式更容易使用。
基於上述原因,我們決定遵循規格,而非維護既不符合規格,也不與唯一其他實作項目相容的 API。如需替代方案,開發人員應使用 TouchEvent 建構函式。
由於 iOS 和 Android/Chrome 實作的 initTouchEvent API 差異極大,網站通常會採用類似下列的程式碼 (經常忘記 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);
這項做法不妥,因為系統會在 User-Agent 中尋找「Android」,而 Android 上的 Chrome 會比對並觸發這項淘汰作業。不過,由於 Android 上仍有其他 WebKit 和舊版 Blink 瀏覽器,您仍需支援舊版 API,因此目前無法移除。
如要在網路上正確處理 TouchEvent,請檢查 window 物件上是否存在 TouchEvent,並確認該物件是否具有正向「長度」(表示該物件是接受引數的建構函式),然後使用該物件,藉此支援 Firefox、IE Edge 和 Chrome。
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 屬性
簡而言之:我們將移除支援度不高的 keyboardEvent.keyIdentifier 屬性,改用以標準為基礎的 KeyboardEvent.key 屬性。
移除意圖 | Chromestatus 追蹤工具 | Chromium 錯誤
keyboardEvent.keyIdentifier 屬性在 2009 年和 2010 年曾短暫納入 W3C 規格。不過,這項功能只在 WebKit 中實作。
如要取代這項屬性,開發人員可以使用以標準為基礎的 KeyboardEvent.key 屬性或 KeyboardEvent.code 屬性 (如我們去年春季發布的文章所述)。前者是實作範圍最廣的技術,除了 Safari 之外,所有主要電腦版瀏覽器都支援這項技術。後者目前支援 Chrome、Firefox 和 Opera。移除這項功能是為了推動採用 KeyboardEvent.key 資源。Apple 尚未說明是否會支援這項功能,但 Safari 仍提供已淘汰 (但尚未從 Chrome 移除) 的 KeyboardEvent.keyCode 和 KeyboardEvent.charCode 屬性。
移除 MediaStream 結束事件和屬性,以及 onended 屬性
TL;DR:ended 事件和屬性以及 onended 事件處理常式已從 Media Capture and Streams 規格中移除,因此也將一併移除。
移除意圖 | Chromestatus 追蹤工具 | Chromium 錯誤
ended 事件和 onended 事件處理常式已從 WebRTC 規格中移除約三年。如要監看事件,開發人員應使用 MediaStreamTracks,而非 MediaStreams。
淘汰 SVGSVGElement.viewPort
自 2012 年起,這項實作方式就無法在 Chrome 中運作。其他瀏覽器完全沒有這個屬性,因此規格已將其移除。基於上述原因,我們將淘汰這項屬性。預計會在 Chrome 55 中移除。
移除意圖 | Chromestatus 追蹤工具 | Chromium 錯誤
淘汰 SVGViewElement.viewTarget
SVGViewElement.viewTarget 屬性不屬於 SVG2.0 規格,而且使用率很低或根本沒有。Chrome 54 版已淘汰這項屬性。預計在 Chrome 56 版中移除。
移除意圖 | Chromestatus 追蹤工具 | Chromium 錯誤
移除 SVGZoomEvent
SVGZoomEvent 不屬於 SVG2.0 規格,且無法在 Chromium 中運作。但這項功能仍可偵測,可能會造成開發人員混淆。系統會移除該項目。