Chrome 57 中的 API 弃用和移除

Joe Medley
Joe Medley

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

移除了 BluetoothDevice.uuids 属性

我们将移除 BluetoothDevice.uuids 属性,以使 Web Bluetooth API 符合当前规范。您可以通过调用 device.getPrimaryServices() 检索所有允许的 GATT 服务。

Chromium bug

移除密钥生成元素

从 Chrome 49 开始,除非向此网页授予权限,否则 <keygen> 的默认行为是返回空字符串。IE/Edge 不支持 <keygen>,并且未指明支持 <keygen> 的公共信号。Firefox 已将 <keygen> 置于用户手势后面,但公开支持将其移除。Safari 提供 <keygen>,但尚未就是否继续支持该功能公开发表意见。在 Chrome 57 中,此元素已被移除。

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

移除了带前缀的资源时间戳缓冲区管理 API

两个方法和一个事件处理脚本(webkitClearResourceTimings()webkitSetResourceTimingBufferSize()onwebkitresourcetimingbufferfull)已废弃,并且特定于供应商。从 Chrome 46 开始,Chrome 支持这些 API 的标准版本,并且该版本中也废弃了带前缀的函数。这些功能最初是在 WebKit 中实现的,但 Safari 尚未启用它们。Firefox、IE 10 及更高版本和 Edge 仅提供不带前缀的 API 版本。因此,我们将移除 WebKit 版本。

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

移除了 ServiceWorkerMessageEvent,改用 MessageEvent

HTML 规范扩展了 MessageEvent,以允许将 ServiceWorker 用作 source 属性的类型。client.postMessage() 和自定义消息事件的创建已更改为使用 MessageEvent 而非 ServiceWorkerMessageEvent。已移除 ServiceWorkerMessageEvent

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

移除了带有 webkit 前缀的 IndexedDB 全局别名

在 Chrome 11 左右,IndexedDB 入口点和全局构造函数以 webkit 前缀的形式公开。无前缀版本在 Chrome 24 中添加,而带前缀的版本在 Chrome 38 中已废弃。以下接口受到影响:

  • webkitIndexedDB(主要入口点)
  • webkitIDBKeyRange(不可调用的全局构造函数,但具有实用的静态方法)
  • webkitIDBCursor
  • webkitIDBDatabase
  • webkitIDBFactory
  • webkitIDBIndex
  • webkitIDBObjectStore
  • webkitIDBRequest
  • webkitIDBTransaction(不可调用的全局构造函数)

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

WebAudio:移除带前缀的 AudioContext 和 OfflineAudioContext

自 2011 年年中起,Chrome 就支持 WebAudio,包括 AudioContextOfflineAudioContext 在次年添加。鉴于标准接口的支持时间已久,以及 Google 的长期目标是移除带前缀的功能,自 2014 年底起,这些接口的带前缀版本已废弃,现在将被移除。

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

弃用并移除 webkitCancelRequestAnimationFrame

webkitCancelRequestAnimationFrame() 方法是一种已废弃的供应商专用 API,Chromium 中早已支持标准 cancelAnimationFrame()。因此,我们将移除 WebKit 版本。

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

废弃了对 usemap 属性的不区分大小写匹配

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

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

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

弃用 Service Worker 中的 FileReaderSync

服务工件规范一直有一条(非规范性)备注,即“不得在服务工件内发起任何类型的同步请求”,以避免阻塞服务工件。屏蔽服务工件会屏蔽来自受控网页的所有网络请求。很遗憾,FileReaderSync API 已在服务工件中提供很长时间了。

目前,只有 Firefox 和 Chrome 在服务工件中公开了 FileReaderSync。 在规范讨论中,Firefox 同意应解决此问题。预计会在 Chrome 59 中移除。

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

废弃了 HTMLEmbedElement 和 HTMLObjectElement 的旧版调用方

接口具有旧版调用方意味着实例可以作为函数调用。目前,HTMLEmbedElementHTMLObjectElement 支持此功能。在 Chrome 57 中,此功能已废弃。移除该 API 后(预计在 Chrome 58 中),调用该 API 将会抛出异常。

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

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

废弃“negotiate”的 RTCRtcpMuxPolicy

Chrome 使用 rtcpMuxPolicy 指定其关于使用 RTP/RTCP 多路复用功能的首选政策。在 Chrome 57 中,出于以下原因,我们将默认 rtcpMuxPolicy 更改为“require”,并废弃了“negotiate”:

  • 非复用 RTCP 会使用额外的网络资源。
  • 移除“negotiate”将简化 API Surface,因为“RtpSender”/“RtpReceiver”将只具有单个传输。

在 Chrome 57 中,“negotiate”已废弃。我们认为这项变更不会破坏现有功能,因为用户会收到废弃消息,并且仍可创建 RTCPeerConnection。此功能将在 Chrome 63 中移除。

弃用意图 | Chromium bug

废弃对子资源请求中嵌入式凭据的支持

从安全角度来看,将凭据硬编码到子资源请求中存在问题,因为这在过去曾允许黑客通过暴力破解来获取凭据。对于会访问内部 IP 范围(路由器等)的有凭据子资源请求,这些危险会更加严重。鉴于使用率较低,关闭这个(小)安全漏洞似乎非常合理。

开发者可以嵌入不需要基本/摘要身份验证的资源,而改为依赖于 Cookie 和其他会话管理机制。

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