Chrome 58 中的弃用和移除功能

Joe Medley
Joe Medley

在几乎每个版本的 Chrome 中,我们都会对该产品及其性能以及 Web 平台的功能进行大量更新和改进。本文介绍了 Chrome 58 中已弃用和移除的功能。Chrome 58 自 3 月 16 日起处于 Beta 版阶段。此列表随时都可能发生变化。

Android 上的鼠标停止触发 TouchEvent

在 Chrome 57 之前,Chrome 中的 Android 低级鼠标事件主要遵循专为触摸互动而设计的事件路径。例如,在按下鼠标按钮时发生的鼠标拖动会生成 MotionEvents,并通过 View.onTouchEvent 传送。

但由于触摸事件不支持悬停,因此悬停 mousemove 会遵循单独的路径。这种设计会产生许多副作用,包括鼠标互动会触发 TouchEvents、所有鼠标按钮都显示为左键,以及 MouseEventsTouchEvents 抑制。

从 Chrome 58 开始,Android M 或更高版本中的鼠标将:

  • 不再触发 TouchEvents
  • 使用适当的按钮和其他属性触发一致的 MouseEvents 序列。

移除意图 | Chromestatus 跟踪器 | Chromium bug

移除了对 usemap 属性的不区分大小写匹配

usemap 属性以前被定义为不区分大小写。遗憾的是,实现此功能非常复杂,没有任何浏览器能够正确实现它。研究表明,我们无需使用如此复杂的算法,甚至无需使用 ASCII 不区分大小写的匹配。

因此,我们更新了规范,以应用区分大小写的匹配。旧行为已在 Chrome 57 中废弃,现已移除。

移除意图 | Chromestatus 跟踪器 | Chromium bug

移除了内容发起的顶部框架导航到数据网址

由于非技术类浏览器用户不熟悉 data: 方案,因此我们越来越多地发现 data: 方案被用于欺骗和钓鱼式攻击。为防止这种情况,我们会阻止网页在顶部框架中加载 data: 网址。这适用于 <a> 标记、window.openwindow.location 和类似机制。data: 架构仍适用于由网页加载在下方的资源。

Chrome 60 将移除此功能。

移除意图 | Chromestatus 跟踪器 | Chromium bug

移除了动画路径属性的已废弃名称

借助运动路径 CSS 属性,作者可以为任何图形对象沿作者指定的路径添加动画效果。为了遵循规范,我们在 Chrome 45 中实现了多个属性。2016 年年中,规范中更改了这些属性的名称。Chrome 在 Chrome 55 和 Chrome 56 中实现了新名称。还实现了 Play 管理中心弃用警告。

在 Chrome 58 中,旧版媒体资源名称将被移除。受影响的媒体资源及其新名称如下所示。

已移除的媒体资源 当前名称
motion-path offset-path
motion-offset offset-distance
motion-rotation offset-rotate
动作 offset

移除意图

从非安全上下文中移除 EME

加密媒体扩展 (EME) 的某些用法会公开非开源的数字版权管理实现,涉及对永久唯一标识符的访问,并且/或者在不受沙盒限制的情况下运行或具有特权访问权限。通过不安全的 HTTP 公开的网站面临的安全风险会增加,因为这些网站可能会受到该渠道上的任何人攻击。此外,当需要用户同意时,此类攻击者可能会利用用户对不安全 HTTP 网站的持续接受行为。

EME 版本 1 规范已移除对非安全上下文的支持,建议的推荐方案也不支持,后续的最终推荐方案也不会支持。自 Chrome 44(2015 年 5 月)起,该 API 便会在非安全源上显示废弃消息。在 Chrome 58 中,该功能现已移除。此次变更是我们为从不安全的来源移除强大功能所做的更广泛努力的一部分。

移除意图 | Chromestatus 跟踪器 | Chromium bug

移除了 HTMLEmbedElement 和 HTMLObjectElement 的旧版调用方

接口具有旧版调用方意味着实例可以作为函数调用。目前,HTMLEmbedElementHTMLObjectElement 支持此功能。在 Chrome 57 中,此功能已被弃用。从 Chrome 58 开始,调用会抛出异常。

此次变更使 Chrome 与近期的规范变更保持一致。Edge 或 Safari 不支持旧版行为,并且Firefox 中将移除此行为。

移除意图 | Chromestatus 跟踪器 | Chromium bug

移除了标准之前的 ChaCha20-Poly1305 加密算法

2013 年,Chrome 31 部署了基于 Dan Bernstein 教授的 ChaCha20 和 Poly1305 算法的新 TLS 加密套件。这些规范后来在 IETF 中进行了一些小调整,并作为 RFC 7539RFC 7905 进行了标准化。我们于 2016 年初通过 Chrome 49 发布了标准化变体。我们现在将移除非标准款式/规格。

移除意图 | Chromestatus 跟踪器 | Chromium bug

移除了对证书中 commonName 匹配的支持

RFC 2818 介绍了将网域名与证书进行匹配的两种方法:使用 subjectAlternativeName 扩展中的可用名称,或者在没有 SAN 扩展的情况下回退到 commonName。RFC 2818(2000 年发布)已弃用回退到 commonName 的做法,但许多 TLS 客户端仍支持此做法,但通常是错误的。

使用 subjectAlternativeName 字段可明确证书是表示与 IP 地址还是域名绑定,并根据其与名称约束条件的互动进行全面定义。不过,commonName 含糊不清,因此,对它的支持一直是 Chrome、它使用的库以及整个 TLS 生态系统中安全 bug 的来源。

移除 commonName 的兼容性风险较低。RFC 2818 已将其弃用近 20 年,自 2012 年起,基准要求(所有受大众信任的证书授权机构都必须遵守)就要求必须提供 subjectAltName。从 Firefox 48 开始,Firefox 已要求所有新颁发的受大众信任的证书都包含 subjectAltName

移除意图 | Chromestatus 跟踪器 | Chromium bug

为遵循最新规范,我们已从 WebVTT 规范中移除界面元素 regionsaddRegion()removeRegion(),并在 Chrome 58 中将其移除。由于该功能从未默认启用(即需要通过标志启用),因此此次移除对用户的影响应该不大。需要替代方案的用户可以使用 Chrome 58 中添加的 VTTCue.region 属性。

Chromestatus 跟踪器 | Chromium bug

WebAudio:移除了 AudioSourceNode 接口

AudioSourceNode 接口不属于 Web Audio 规范,不可构建,也没有属性,因此基本上没有开发者可访问的功能。因此,我们将其移除。

移除意图 | Chromestatus 跟踪器 | Chromium bug

移除了 webkitdropzone 全局属性

HTML5 拖放规范引入了 dropzone 全局属性,作为一种声明式方法来指定 HTML 元素是否愿意成为拖放操作的目标、可拖放到该元素的内容类型,以及拖放操作(复制/移动/链接)。

该属性未在浏览器供应商中获得关注。Blink 和 WebKit 仅实现带前缀的属性形式 webkitdropzone。由于 2017 年 3 月初从规范中移除了 dropzone 属性,因此 Chrome 也将移除带前缀的版本。

移除意图 | Chromestatus 跟踪器 | Chromium bug

废弃不安全的通知用法

通知是一项强大的功能,因为它们允许网站调用系统界面来传输私密信息本身或私密信息已更改的信号。攻击者可能会通过不安全的连接嗅探或窃取通过通知发送的任何信息。网站推送需要安全的来源,因此此更改将使非推送通知与推送通知保持一致。此次变更是我们为从不安全的来源移除强大功能所做的更广泛努力的一部分。

移除意图 | Chromestatus 跟踪器 | Chromium bug

废弃通过不安全的 iframe 使用通知

来自 iframe 的权限请求可能会让用户感到困惑,因为很难区分包含页面的来源和发出请求的 iframe 的来源。如果请求范围不明确,用户就很难判断是否授予权限。

禁止在 iframe 中显示通知,还会使通知权限要求与推送通知权限要求保持一致,从而为开发者减轻负担。

需要此功能的开发者可以打开一个新窗口来请求通知权限。

该功能已在 Chrome 62 中移除。

移除意图 | Chromestatus 跟踪器 | Chromium bug

移除了 indexedDB.webkitGetDatabaseNames()

我们在 Indexed DB 在 Chrome 中相对较新且前缀非常流行时添加了此功能。API 会异步返回来源中现有数据库名称的列表,这似乎很合理。

遗憾的是,该设计存在缺陷,因为结果可能会在返回后立即过时,因此它实际上只能用于日志记录,而不能用于严肃的应用逻辑。GitHub 问题跟踪/链接了之前关于替代方案的讨论,这些替代方案需要采用不同的方法。虽然开发者对此时常感兴趣,但由于缺乏跨浏览器进展,库作者已找到解决此问题的方法。

需要此功能的开发者需要自行开发解决方案。例如,Dexie.js 等库使用全局表,该表本身就是另一个用于跟踪数据库名称的数据库。

此功能已从 Chrome 60 中移除。

废弃意图 | Chromestatus 跟踪器 | Chromium bug