Chrome 60 中的弃用和移除内容

Joe Medley
Joe Medley

在几乎每个版本的 Chrome 中,我们都看到了针对产品及其性能以及网络平台功能的大量更新和改进。本文介绍了自 6 月 8 日起 Chrome 60 Beta 版中弃用和移除的内容。此列表随时可能发生变化。

安全性

crypto.subtle 现在要求使用安全的源

Web Crypto API 从 Chrome 37 开始一直支持非安全源。由于 Chrome 的长期政策是优先使用安全源以获得强大功能,因此 crypto.subtle 并非仅在安全源中显示。

意图移除 | Chromium 错误

移除通过内容发起的指向数据网址的顶部框架导航

非技术浏览器用户不熟悉,因此有越来越多的用户使用 data: 机制进行仿冒和钓鱼式攻击攻击。为防止出现这种情况,我们会阻止网页在顶级框架中加载 data: 网址。这适用于 <a> 标记、window.openwindow.location 和类似机制。data: 架构仍适用于页面加载的资源。

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

意图移除 | Chromestatus Tracker | Chromium 错误

暂时对某些 blob 停用 navigator.sendBeacon()

navigator.sendBeacon() 函数已从 Chrome 39 开始可用。按照最初的实现方式,函数的 data 参数可以包含类型未列入 CORS 安全名单的任何任意 blob。虽然还没有人试图利用它,但我们相信这是一个潜在的安全威胁。由于我们没有立即解决此问题的合理修复,因此暂时无法对类型未列入 CORS 安全名单的 blob 调用 sendBeacon()

虽然此项变更已针对 Chrome 60 实施,但目前已合并到 Chrome 59 中。

Chromium 错误

CSS

使阴影穿刺后代组合器的行为类似于后代组合器

阴影穿透后代组合器 (>>>) 是 CSS 作用域模块级别 1 的一部分,旨在匹配特定祖先元素的子项,即使这些子项出现在影子树内也是如此。这存在一些限制。首先,根据规范,它只能在 querySelector() 等 JavaScript 调用中使用,而不能用于样式表。更重要的是,浏览器供应商无法使其工作超出 Shadow DOM 的一个级别。

因此,从相关规范(包括 Shadow DOM v1)中移除了后代组合器。我们选择将阴影穿戴后代组合器的别名设为后代组合符,而不是通过从 Chromium 中移除此选择器来破坏网页。原始行为 Chrome 45 中已废弃。Chrome 61 中实现了这一新行为。

意图移除 | Chromestatus Tracker | Chromium 错误

JavaScript

废弃并移除了 RTCPeerConnection.getStreamById()

大约两年前,getStreamById() 已从 WebRTC 规范中移除。大多数其他浏览器已将其从其实现中移除。虽然人们认为此函数用处不多,但也认为在仍支持 getStreamById() 的 Safari 以外,与基于 Edge 和 WebKit 的浏览器存在一些细微的互操作性风险。需要替代实现的开发者可以在下面的“移除的 intent”中找到示例代码。

Chrome 62 中提供移除功能。

意图移除 | Chromestatus Tracker | Chromium 错误

废弃了 SVGPathElement.getPathSegAtLength

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

打算弃用 | Chromestatus Tracker | Chromium 错误

将 getContextAttributes() 移到标记后面

从 2013 年开始,CanvasRenderingContext2D 就一直支持 getContextAttributes() 函数。然而,该功能并未纳入任何标准,也从那以后也未纳入标准。它应该通过 --enable-experimental-canvas-features 命令行标志来实现,但被误判了。在 Chrome 60 中,这一疏漏已得到纠正。我们认为此更改是安全的,因为没有数据表明有人正在使用该方法。

Chromium 错误

移除 Headers.prototype.getAll()

我们正在根据最新版本的 Fetch 规范移除 Headers.prototype.getAll() 函数。

意图移除 | Chromestatus Tracker | Chromium 错误

移除了 indexDB.webkitGetDatabaseNames()

我们在 Chrome 中的 Indexed DB 是相对较新且前缀盛行时就添加了此功能。该 API 会异步返回一个源中现有数据库名称的列表,这似乎足够合理。

遗憾的是,该设计存在缺陷。结果在返回后可能会立即过时,因此它实际上仅用于日志记录,而非严重的应用逻辑。GitHub 问题提供了指向之前关于替代方案的讨论/链接的链接,而这些方案则需要采用其他方法。虽然开发者时常关注,但由于缺乏跨浏览器进度,库作者已解决了这个问题。

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

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

打算移除 | Chromestatus Tracker | Chromium 错误

移除“WEBKIT_KEYFRAMES_RULE”和“WEBKIT_KEYFRAME_RULE”

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

打算移除 | Chromestatus Tracker | Chromium 错误

界面

beforeunload 对话框需要使用用户手势

从 Chrome 60 开始,只有在尝试显示该帧的帧已收到用户手势或用户互动(或者任何嵌入的帧已收到此类手势)时,beforeunload 对话框才会显示。需要明确的是,这并不会改变 beforeunload 事件的分派方式。而只是更改是否显示该对话框。

beforeunload 对话框是一种应用模态对话框。因此,它本质上就是用户恶意的,这意味着它通过质疑用户的决定来响应用户导航。此功能获得了积极的作用。例如,它通常用于在用户因导航而丢失数据时发出警告。

虽然页面为 beforeunload 对话框提供文本的功能已于不久前移除,但 beforeunload 对话框仍是滥用行为的媒介。具体而言,beforeunload 对话框是诈骗网站的组成部分,在此类网站上自动播放音频和威胁性文字会营造一种情景,使 Chromium 提供的“确定要离开此页面”消息令人担忧。

我们希望找到线程,并且仅允许合理使用 beforeunload 对话框。对话框的良好用途是用户处于可能丢失的状态。如果用户从未与页面交互,则用户不会有任何可能丢失的状态,因此在这种情况下,我们不会通过禁止显示对话框来面临用户数据丢失的风险。