在几乎每个版本的 Chrome 中,我们都会看到产品、性能以及 Web 平台功能方面有大量更新和改进。本文介绍了 Chrome 54 中的弃用和移除项,该版本截至 9 月 15 日仍处于 Beta 版阶段。此列表随时可能会发生变化。
在卸载处理程序中停用导航
总结:所有跨源导航都将在 window.onunload 事件处理程序中被禁止,以使 Chrome 与 HTML 规范以及 Firefox 和 Safari 保持一致。
移除意向 | Chromestatus 跟踪器 | Chromium Bug
之前的 Chrome 版本允许在 window.onunload 内中断跨源导航。通过设置 window.location.href = '#fragment' 实现。根据 HTML 规范,卸载处理程序中仅允许进行页面内导航,并且在之前的 Chrome 版本中,其他导航方法会按照规范要求被阻止。从 Chrome 54 开始,此类导航将被禁止,以便与规范以及 Firefox 和 Safari 保持一致。
HTTP/0.9 已弃用
总结:HTTP/0.9 已被弃用。开发者应改用更高版本,最好是 HTTP/2。
移除意向 | Chromestatus 跟踪器 | Chromium Bug
HTTP/0.9 是 HTTP/1.x 的前身。它缺少许多后续版本的功能。现代 Web 的一个特别令人担忧的问题是缺少响应标头。如果没有这些标头,就无法验证 HTTP/0.9 响应是否真的是 HTTP/0.9 响应。这可能会导致一些问题。例如,除其他问题外,还包括:
- 将某些错误响应视为有效的 HTTP/0.9 响应的客户端。
- 未能关闭请求套接字的服务器会导致客户端将响应视为挂起的 GET,该 GET 会永久保持活动状态,或者直到用户离开发出请求的网页。
- 无法向浏览器表明请求失败的服务器,这可能会导致缓存启发法出现问题。
解决 HTTP/0.9 问题的唯一万无一失的方法是完全移除支持。因此,Chrome 54 中移除了对 HTTP/0.9 的支持。
已移除 initTouchEvent 的使用
总结:
initTouchEvent已被弃用,取而代之的是 TouchEvent
constructor,以提高规范合规性,并且将在 Chrome 54 中完全移除。
移除意向 | Chromestatus 跟踪器 | Chromium Bug
长期以来,开发者一直能够使用 initTouchEvent API 在 Chrome 中创建合成触控事件。这些事件经常用于模拟触摸事件,以便测试或自动执行网站中的某些界面。自 Chrome 49 以来,此已弃用的 API 会显示以下警告。
TouchEvent.initTouchEvent 已弃用,将在 M53(大约在 2016 年 9 月)中移除。请改用 TouchEvent 构造函数。如需了解详情,请参阅
https://www.chromestatus.com/features/5730982598541312。
除了不在触控事件规范中之外,还有许多原因表明此变更是好的。
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);
这很糟糕,因为该代码会在 User-Agent 中查找“Android”,而 Android 上的 Chrome 会匹配并命中此弃用。不过,目前还无法移除它,因为在一段时间内,Android 上仍会有其他基于 WebKit 和旧版 Blink 的浏览器,您仍需要支持旧版 API。
为了正确处理网页上的 TouchEvent,您应该更改代码以支持 Firefox、IE Edge 和 Chrome,方法是检查 window 对象上是否存在 TouchEvent,如果存在且“length”为正值(表示它是一个接受实参的构造函数),您应该使用该构造函数。
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 Bug
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 属性
总结:ended 事件和属性以及 onended 事件处理程序将被移除,因为它们已从 Media Capture and Streams 规范中移除。
移除意向 | Chromestatus 跟踪器 | Chromium Bug
ended 事件和 onended 事件处理程序大约三年前就已不再是 WebRTC 规范的一部分。想要观看事件的开发者应使用 MediaStreamTracks,而不是 MediaStreams。
弃用了 SVGSVGElement.viewPort
自 2012 年以来,该实现一直无法在 Chrome 中正常运行。该属性在其他浏览器中根本不存在,因此已从规范中移除。因此,我们即将弃用该属性。预计会在 Chrome 55 中移除。
移除意向 | Chromestatus 跟踪器 | Chromium Bug
弃用了 SVGViewElement.viewTarget
SVGViewElement.viewTarget 属性不属于 SVG2.0 规范,使用率很低或根本没有。此属性已在 Chrome 54 中弃用。预计会在 Chrome 56 中移除。
移除意向 | Chromestatus 跟踪器 | Chromium Bug
移除 SVGZoomEvent
SVGZoomEvent 不属于 SVG2.0 规范,在 Chromium 中无法正常运行。尽管如此,该功能仍可被检测到,可能会让开发者感到困惑。该功能将被移除。