最近 Chrome 发布了 121 版本,我们一起来看看有哪些值得关注的更新吧~
Element Capture API 可以让你捕获并记录一个特定的 HTML 元素。换句话说,它能剪裁并去除那些遮盖和被遮盖的内容。
举个例子,Element Capture API 可能会在 Web 视频会议应用里派上用场。比如我们在 ifram 中嵌入了第三方应用,在这种情况下,你可能希望将这个 ifram 作为视频捕获并传输给远程参与者。

在以前,我们可以使用 Region Capture 来实现这个功能,但在这种情况下,如果有一些内容,比如下拉列表,显示在所选内容的上方,那么这个下拉列表也会成为录制的一部分。

Element Capture API 通过让你锁定要捕获的元素来解决这种问题。

具体怎么使用呢,大概的思路如下:
captureTarget 是你页面上包含用户希望捕获的内容的元素。我们希望视频会议的 web 应用程序捕获 captureTarget 并与远程参与者分享。然后我们从 captureTarget 中派生出一个 RestrictionTarget。通过使用这个 RestrictionTarget 限制视频轨道之后,这个视频轨道上的帧现在只包含属于 captureTarget 及其直接 DOM 后代的像素。
如果 captureTarget 改变大小、形状或位置,视频轨道会进行跟踪,我们不需要从 web 应用程序获得任何额外的输入。同样,出现、消失或移动的遮盖内容也无需特殊处理。
我们来看看代码怎么写,首先,允许用户捕获当前标签页。
// 请求用户授权,开始捕获当前的标签页。
const stream = await navigator.mediaDevices.getDisplayMedia({
preferCurrentTab: true,
});
const [track] = stream.getVideoTracks();
通过调用 RestrictionTarget.fromElement() 并将你选择的元素作为输入,定义一个 RestrictionTarget 。
// 将 captureTarget 与一个新的 RestrictionTarget 关联起来
const captureTarget = document.querySelector("#captureTarget");
const restrictionTarget = await RestrictionTarget.fromElement(captureTarget);
然后在视频轨道上调用 restrictTo() 函数,将 RestrictionTarget 作为输入。一旦最后一个 promise 成功返回,所有后续的帧都将受到限制。
// 开始使用 RestrictionTarget 限制自我捕捉的视频轨道。
await track.restrictTo(restrictionTarget);
// 传输成功 。。。
具体的使用大家可以通过在 Glitch 上运行 Demo (https://element-capture-demo.glitch.me/) 来体验 Element Capture :

网站可以使用 Speculation Rules API,来、以编程的方式告诉 Chrome 哪些页面需要进行预渲染,通过减少页面导航时间,创建更好的用户体验,这个 API 刚推出的时候我写了一篇文章来介绍它:
在 Chrome 121 版本中 Speculation Rules API 支持了 document rules(文档规则)。

文档规则是对当前推测规则语法的扩展,可以让浏览器从页面中的元素获取用于推测性加载的 URL 列表。文档规可以让我们配置哪些链接可以使用预渲染的一些条件,配合新增的 "eagerness" 字段,可以让我们立即,悬停或点击鼠标时自动预取或预渲染页面上的链接。
下面是一个文档规则的例子:
{
"prerender": [
{"where": {"and": [
{"href_matches": "/*"},
{"not": {"href_matches": "/logout"}},
{"not": {"selector_matches": ".no-prerender"}}
]}}
]
}
另一个变化是允许通过 Speculation-Rules HTTP 响应头来指定推测规则。可以作为使用内联 <script> 元素的替代方案。这个 Header 的值必须是一个 URL,该 URL 指向一个具有 "application/speculationrules+json" MIME 类型的文本资源。该资源的规则将被添加到文档的规则集中。
另外,No-Vary-Search Header 可以让 URL 查询参数发生改变的情况下,推测性的预取也能成功匹配。其声明了 URL 查询的某些或者所有部分可以被忽略,用于匹配的目的。它可以声明查询参数键的顺序不应阻止匹配,特定的查询参数不应阻止匹配,或者只有某些已知的查询参数应该引起不匹配。
scrollbar-color 和 scrollbar-width 属性。使用它们,你可以自定义滚动条,并改变它们的颜色和宽度。/* Keyword values */
scrollbar-color: auto;
scrollbar-color: dark;
scrollbar-color: light;
/* <color> values */
scrollbar-color: rebeccapurple green; /* Two valid colors.
The first applies to the thumb of the scrollbar, the second to the track. */
/* Global values */
scrollbar-color: inherit;
scrollbar-color: initial;
scrollbar-color: unset;
font-palette 属性允许你选择一个特定的调色板来渲染颜色字体。这个属性现在支持动画,因此在调色板之间切换变成了两个选定的调色板之间的平滑过渡。
::spelling-error 和 ::grammar-error 允许你自定义拼写和语法错误的颜色,使用背景颜色或其他装饰来突出显示拼写错误的单词,并实现自定义的拼写检查。::spelling-error {
color: red;
}
supports() 条件导入样式表和层。如果支持条件不匹配,导入将不会被获取。mask-mode,mask-composite,mask-position 和 mask-repeat)。此外,现在已经支持远程 SVG 遮罩(例如,mask: url(masks.svg#star))。Devtools Application 选项卡现在可以更友好的展示 COXP、CSP 等安全 Header:

然后在 Issues 选项卡可以更友好的展示 CSP 违规示例:
