Chrome 60 中的弃用和移除内容

Joe Medley
Joe Medley

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

安全

crypto.subtle 现在需要安全的来源

从 Chrome 37 开始,Web Crypto API 一直在非安全来源上运行。由于 Chrome 长期以来的政策是优先为安全源提供强大功能,因此 crypto.subtle 不仅在安全源上可见。

移除意图 | Chromium bug

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

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

此功能已在 Chrome 58 中废弃,现已移除。

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

暂时为某些 Blob 停用 navigator.sendBeacon()

navigator.sendBeacon() 函数自 Chrome 39 起可用。在最初的实现中,该函数的 data 参数可以包含任何类型不属于 CORS 安全列表的任意 blob。我们认为这是一个潜在的安全威胁,但尚无人尝试利用它。由于我们没有合理的即时修复方法,因此暂时无法再对类型不在 CORS 安全名单中的 Blob 调用 sendBeacon()

虽然这项变更已在 Chrome 60 中实现,但此后又合并回到了 Chrome 59。

Chromium bug

CSS

使穿透阴影的后代组合元件像后代组合元件一样运作

穿透阴影的后代组合符 (>>>) 是 CSS 范围限定模块级别 1 的一部分,旨在匹配特定祖先元素的子元素,即使它们出现在阴影树中也是如此。这存在一些限制。首先,根据规范,它只能在 JavaScript 调用(例如 querySelector())中使用,无法在样式表中使用。更重要的是,浏览器供应商无法使其在 Shadow DOM 的多层级别上运行。

因此,后代组合符已从相关规范(包括 Shadow DOM v1)中移除。我们选择将穿透阴影的后代组合符重命名为后代组合符,而不是从 Chromium 中移除此选择器,以免破坏网页。原始行为已在 Chrome 45 中废弃。新行为已在 Chrome 61 中实现。

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

JavaScript

弃用并移除 RTCPeerConnection.getStreamById()

近两年前,getStreamById()从 WebRTC 规范中移除。大多数其他浏览器已从其实现中移除此功能。虽然我们认为此函数的使用率很低,但我们也认为,除了仍支持 getStreamById() 的 Safari 之外,Edge 和基于 WebKit 的浏览器存在一些轻微的互操作性风险。需要替代实现的开发者可以在下方的“移除 intent”中找到示例代码。

该功能已在 Chrome 62 中移除。

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

废弃了 SVGPathElement.getPathSegAtLength

两年多前,getPathSegAtLength()从 SVG 规范中移除了。由于 httparchive 中只有少数命中此方法的记录,因此 Chrome 60 将弃用此方法。我们预计会在 Chrome 62 中移除该功能,该版本将于 10 月初或中旬发布。

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

将 getContextAttributes() 移至标志后面

自 2013 年起,CanvasRenderingContext2D 支持 getContextAttributes() 函数。不过,该功能并未纳入任何标准,自那时起也未纳入任何标准。它本应在 --enable-experimental-canvas-features 命令行 flag 后面实现,但错误地未实现。在 Chrome 60 中,我们已修正此疏忽。我们认为此更改是安全的,因为没有任何数据表明有人在使用该方法。

Chromium bug

移除了 Headers.prototype.getAll()

根据最新版的提取规范Headers.prototype.getAll() 函数将被移除。

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

移除了 indexedDB.webkitGetDatabaseNames()

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

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

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

此功能已在 Chrome 58 中废弃,现已移除。

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

移除了 WEBKIT_KEYFRAMES_RULE 和 WEBKIT_KEYFRAME_RULE

CSS 规则中移除了非标准 WEBKIT_KEYFRAMES_RULEWEBKIT_KEYFRAME_RULE 常量。开发者应改用 KEYFRAMES_RULEKEYFRAME_RULE

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

界面

要求用户通过手势关闭 beforeunload 对话框

从 Chrome 60 开始,只有当尝试显示 beforeunload 对话框的帧收到用户手势或用户互动(或任何嵌入的帧收到此类手势)时,该对话框才会显示。需要说明的是,这并未更改 beforeunload 事件的调度。这只是更改了是否显示对话框。

beforeunload 对话框是一个应用模态对话框。因此,它本质上不利于用户,也就是说,它会通过质疑用户的决定来响应用户导航。此功能也有积极用途。例如,当用户在导航时可能会丢失数据时,系统通常会使用此类消息来提醒用户。

虽然网页为 beforeunload 对话框提供文本的功能已被移除一段时间,但 beforeunload 对话框仍然是滥用行为的途径。特别是,beforeunload 对话框是欺诈网站的组成部分,在这些网站中,自动播放的音频和威胁性文字会营造一种背景,让 Chromium 提供的“您确定要离开此页面吗?”消息变得令人担心。

我们希望谨慎行事,仅允许合理使用 beforeunload 对话框。在用户可能丢失状态的情况下,对话框的使用非常有用。如果用户从未与该网页互动,则用户不会有任何可能丢失的状态,因此在这种情况下,我们抑制该对话框不会导致用户数据丢失。