在几乎每个版本的 Chrome 中,我们都会看到相应产品、其性能以及 Web 平台的功能都有大量的更新和改进。
Chrome 50(预计 Beta 版发布日期:3 月 10 日至 17 日)对 Chrome 进行了多项更改。 此列表随时都可能发生变化。
AppCache 已在不安全情境中废弃
要点:为防范跨站脚本攻击,我们将弃用不安全来源的 AppCache。我们预计,在 Chrome 52 中,该功能仅适用于通过 HTTPS 提供内容的来源。
移除意图 | Chromestatus 跟踪器 | Chromium bug
AppCache 是一项功能,可让您离线且持久地访问某个源,这对于跨站脚本攻击来说是一项强大的权限提升功能。这是我们为从不安全的来源中移除强大功能的更大计划的一部分。
Chrome 正在通过仅允许通过 HTTPS 传输此攻击媒介来消除这种攻击途径。我们将在 Chrome 50 中弃用 HTTP 支持,并希望在 Chrome 52 中完全移除它。
移除了 Document.defaultCharset
要点:移除了 document.defaultCharset
,以更好地符合规范要求。
移除意图 | Chromestatus 跟踪器 | CRBug 问题
Chrome 49 中已废弃的 document.defaultCharset
是一个只读属性,根据用户系统的区域设置返回其系统的默认字符编码。由于浏览器使用 HTTP 响应或网页中嵌入的元标记中的字符编码信息的方式,因此维护此值没有用处。
请改用 document.characterSet
获取 HTTP 标头中指定的第一个值。如果没有,您将获得 <meta>
元素的 charset
属性中指定的值(例如 <meta
charset="utf-8">
)。最后,如果没有任何值可用,document.characterSet
将是用户的系统设置。
如需详细了解不对此进行规范的原因,请参阅此 GitHub 问题
从链接元素中移除了子资源属性
要点:移除了对 HTMLLinkElement
的 rel
属性的 subresource
值的支持。
移除意图 | Chromestatus 跟踪器 | Chromium bug
<link> 上的 subresource
属性的用途是在浏览器空闲时预加载资源。浏览器下载网页后,可以预先下载其他网页等资源,以便在用户请求这些资源时,只需从浏览器缓存中检索即可。
subresource
属性存在许多问题。首先,它从来没有按预期运行。系统以低优先级下载了引用的资源。除了 Chrome 之外,任何浏览器都未实现此属性。Chrome 实现存在一个 bug,会导致资源下载两次。
希望通过预加载内容来改善用户体验的开发者有多种选择,其中最具可定制性的是构建服务工作器,以利用预缓存和 Caches API。其他解决方案包括rel
属性的其他值,包括 preconnect
、prefetch
、preload
、prerender
。其中一些选项属于实验性选项,可能不受广泛支持。
移除不安全的 TLS 版本回退功能
TL;DR:移除强制服务器使用安全性较低的应用或非安全版本的 TLS 返回数据的机制。
移除意图 | Chromestatus 跟踪器 | Chromium bug
传输层安全协议 (TLS) 支持协商版本的机制,可在不破坏兼容性的情况下引入新的 TLS 版本。某些服务器以这样的方式实现这一点,使得浏览器必须使用不安全的端点作为后备。因此,攻击者可以强制任何网站(而不仅仅是配置错误的网站)协商使用较弱的 TLS 版本。
受影响的网站将无法与 ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION
连接。管理员应确保其服务器软件是最新版本。如果问题仍未得到解决,请与服务器软件供应商联系,看看是否有可用的解决方法。
移除了 KeyboardEvent.prototype.keyLocation
TL;DR:为 Keyboard.prototype.location
属性移除不需要的别名。
意图移除 | Chrome 状态跟踪器 | Chromium bug
此属性只是 Keyboard.prototype.location
属性的别名,可用于在键盘上多个位置的按键之间进行区分。例如,借助这两个属性,开发者可以区分扩展键盘上的两个 Enter
键。
RTCPeerConnection 方法中所需的错误和成功处理程序
要点:WebRTC RTCPeerConnection 方法 createOffer()
和 createAnswer()
现在需要错误处理程序和成功处理程序。以前,只需使用成功处理脚本即可调用这些方法。该用法已废弃。
移除意图 | Chromestatus 跟踪器 | Chromium bug
在 Chrome 49 中,我们在不提供错误处理程序的情况下调用 setLocalDescription()
或 setRemoteDescription()
时添加了警告。从 Chrome 50 开始,错误处理程序参数是必需的。
这是为了为在这些方法中引入 Promise 扫清障碍,以满足 WebRTC 规范的要求。
以下是 WebRTC RTCPeerConnection 演示中的示例(main.js,第 126 行):
function onCreateOfferSuccess(desc) {
pc1.setLocalDescription(desc, function() {
onSetLocalSuccess(pc1);
}, onSetSessionDescriptionError);
pc2.setRemoteDescription(desc, function() {
onSetRemoteSuccess(pc2);
}, onSetSessionDescriptionError);
pc2.createAnswer(onCreateAnswerSuccess, onCreateSessionDescriptionError);
}
请注意,setLocalDescription()
和 setRemoteDescription()
都有错误处理脚本。只期望有成功处理程序的旧版浏览器会直接忽略错误处理程序参数(如果存在);在旧版浏览器中调用此代码不会导致异常。
一般来说,对于生产环境 WebRTC 应用,我们建议您使用 adapter.js
,这是一个由 WebRTC 项目维护的 shim,可使应用不受规范变更和前缀差异的影响。
XMLHttpRequestProgressEvent 已不再受支持
要点:系统将移除 XMLHttpRequestProgressEvent
接口以及 position
和 totalSize
属性。
移除意图 | Chromestatus 跟踪器 | Chromium bug
此事件用于支持 Gecko 兼容性属性 position
和 totalSize
。Mozilla 22 中已弃用对这三者的支持,并且这些功能早已被 ProgressEvent
取代。
var progressBar = document.getElementById("p"),
client = new XMLHttpRequest()
client.open("GET", "magical-unicorns")
client.onprogress = function(pe) {
if(pe.lengthComputable) {
progressBar.max = pe.total
progressBar.value = pe.loaded
}
}
移除了带前缀的加密媒体扩展
要点:我们移除了带有前缀的加密媒体扩展,改用基于规范的无前缀替代扩展。
移除意图 | Chromestatus 跟踪器 | Chromium bug
在 Chrome 42 中,我们发布了基于规范的无前缀版加密媒体扩展程序。此 API 用于发现和选择数字版权管理系统,并与之互动,以便与 HTMLMediaElement
搭配使用。
那已经是差不多一年以前的事了。由于不带前缀的版本比带前缀的版本具有更多功能,因此现在是时候移除带前缀的 API 版本了。
取消了对 SVGElement.offset 属性的支持
TL;DR:SVGElement 的偏移属性已被舍弃,取而代之的是 HTMLElement
上更广泛支持的属性。
意图移除 | Chrome 状态跟踪器 | Chromium bug
HTMLElement
和 SVGElement
长期以来都支持偏移属性;不过,Gecko 和 Edge 仅在 HTMLElement
上支持这些属性。为了提高浏览器之间的一致性,这些属性已在 Chrome 48 中废弃,现在将被移除。
虽然等效属性是 HTMLElement
的一部分,但寻求替代属性的开发者也可以使用 getBoundingClientRect()