Safari 15.5 中的 WebKit 新特性

在两个月前发布功能丰富的 Safari 15.4 之后,WebKit 在此版本 Safari 上的工作主要集中在完善现有功能和修复错误上。

Safari 15.5 确实包含三项面向 Web 开发人员的新技术——支持 HTML 中的 inert 属性;支持 worker-src Content Security Policy 指令;以及用于在基于 WKWebView 的应用中实现新的 CSS 视口单位的新 minimumViewportInsetmaximumViewportInset API。

Safari 15.5 可用于 macOS Monterey 12.4、macOS Big Sur、macOS Catalina、iPadOS 15.5 和 iOS 15.5。您可以在 macOS Big Sur 和 macOS Catalina 上通过前往“系统偏好设置”→“软件更新”→“更多信息”,然后选择更新 Safari 来更新到 Safari 15.5。

开发者特性

首先来看看 HTML inert 属性。设置在元素上时,该属性通过阻止鼠标和键盘焦点、点击、编辑或文本选择,使该元素不可交互。它还会将该元素隐藏起来,不被辅助技术检测到。有关 inert 的更多信息,包括演示如何使用 inert 使轮播中部分屏幕外的内可见但不可交互的演示,请阅读使用 inert 属性的非交互式元素

接下来,让我们看看 Content Security Policy Level 3 对worker-src 的支持。worker-src 指令为 Web 开发人员提供了一种限制哪些 URL 允许作为 worker 脚本(Worker、SharedWorker 或 ServiceWorker)来源的方式。这可用于防止已加载的脚本以 worker 的形式加载更多脚本,这种情况可能容易受到通过过度使用 CPU 进行计算的恶意攻击。我们还在 Web Inspector 中更新了 Content Security Policy 控制台日志记录。

最后,我们在 WKWebView 中添加了 minimumViewportInsetmaximumViewportInset API,以便应用开发人员可以在其 iOS、iPadOS 和 macOS 上的浏览器或其他应用程序中添加对所有新 CSS 视口单位的支持。minimumViewportInset 对应于大尺寸度量,而 maximumViewportInset 对应于小尺寸度量。Safari 15.4 中新增的 CSS 视口单位包括小(svwsvhsvisvbsvminsvmax)、大(lvwlvhlvilvblvminlvmax)、动态(dvwdvhdvidvbdvmindvmax)和逻辑(vivb)单位。

修复和改进

现在,我们来看一下错误修复和功能改进列表。

HTML

  • 修复了模态对话框后面的 SVG 标签不可点击的问题
  • 修复了 Dialog 元素仅动画一次的问题
  • 修复了作为主资源加载的 USDZ 渲染问题
  • 修复了将“.pages”文件上传到接受“.pages”和“.jpeg”文件的文件输入框的问题

Web API

  • 阻止了 BroadcastChannel 在不同的不透明源之间通信
  • 修复了在基于 COOP 的进程交换期间遵守网站策略的问题
  • 修复了 PointerEvent.movementX 始终为 0 的问题
  • 修复了当页面进入页面缓存时解析 fetch promise 的问题
  • 修复了只有在没有指针捕获目标覆盖时才执行点击测试的指针事件问题
  • 修复了当文档由 window.open 创建时计算 cookie 站点的问题
  • 修复了 Element.focus({preventScroll: true}) 在 iOS 上无法正确阻止滚动的问题

CSS

  • 修复了 background-attachement: fixed 的滚动问题
  • 修复了 background-clip: textdisplay: flex 不兼容的问题
  • 修复了许多 position: sticky 元素的渲染问题
  • 修复了 position: sticky 元素滚动时移动不正确的问题
  • 修复了当同级元素具有 will-change: transform 时,带有 opacity 的 <span> 中的文本内容不更新的问题
  • 修复了通过脚本聚焦时 :focus-visible 匹配到错误元素的问题
  • 修复了 text-shadow 被裁剪的问题
  • 修复了 position: sticky 元素在 contain: paint 内部的行为问题
  • 修复了带有百分比宽度的 aspect-ratio 问题
  • 修复了对于没有 transitionanimation 速记属性的元素返回默认计算样式的问题

认证

  • 将 WebAuthn 实现与规范对齐,以便在 makeCredential 中的列表为空时使用默认的 pubKeyCredParams 列表

内容安全策略

  • 修复了阻止对象元素中的图像内容的问题
  • 修复了为分离的元素向文档发送违规报告的问题
  • 改进了 nonce 从 DOM 中的隐藏
  • 更新了内容安全策略对 JavaScript URL 的处理

媒体

  • 修复了现代 EME 与原生 HLS 播放器配对时,单密钥音频的密钥轮换问题
  • 修复了在 Safari 中播放视频时控制中心空间控制被禁用的问题
  • 修复了在传递额外参数时 QuickLook 中模型加载的问题
  • 修复了静音视频在全屏时有时会暂停的问题
  • 修复了 iPhone 7 上的视频播放问题
  • 修复了 HEVC 内容编码生成许多具有宽滑动窗口的 b 帧时的视频播放问题
  • 修复了 HLS 流 currentTime 有时会向后跳跃的问题
  • 修复了点击进度条经常导致 YouTube 视频暂停的问题
  • 修复了 blob 视频暂停时变慢的问题
  • 修复了相机暂停或取消暂停后的音频回声问题
  • 修复了具有无界范围请求的 HTML5 嵌入式音频播放问题
  • 修复了视频海报在播放时过早消失,留下透明视频元素的问题

WebRTC

  • 修复了 getUserMedia 返回的标签不正确的问题,无论选择何种语言
  • 降低了可感知的音频延迟

渲染

  • 修复了超过特定宽度的窗口的文本换行问题
  • 修复了韩语网页字体渲染问题
  • 修复了有时因 transform 变化导致不良渲染的问题
  • 修复了与 transform 相关的动画导致的文本内容闪烁丢失问题
  • 更改为在 theadtbodytfoottr 元素之后使用 colgroup 进行表格大小调整
  • 修复了注音符号(bopomofo)的两个声调符号在特定注音符号字体下纵向文本中位置不正确的问题

Apple Pay

  • 修复了 Apple Pay 表单在 iOS 上返回 billingContact 的问题

WebGL

  • 修复了在 iOS 上使用 preserveDrawingBuffer 时 WebGL 渲染问题
  • 修复了许多与多重采样相关的问题,这些问题导致大量 WebGL 内容出现故障
  • 修复了允许接受带有 AllowShared 的 TypedArray 的处理问题
  • 修复了 WEBGL_multi_draw 验证问题

Web 检查器

  • 修复了处理来自远程设备的大消息的问题
  • 修复了重复打开和关闭的问题

兼容性

  • 修复了从 Safari 启动 Microsoft Teams 的问题

SFSafariViewController

  • 修复了旋转全屏 YouTube 视频时播放出现明显延迟的问题

Safari 扩展

  • 修复了点击 Safari App 扩展工具栏项目时崩溃的问题
  • 修复了 SFContentBlockerManager.getStateOfContentBlocker() 在 iOS 上可能返回不正确值的问题
  • 为 Safari Web 扩展添加了对 optional_host_permissions 的支持

反馈

我们很高兴收到您的来信。发送一条推文给 @webkit@jensimmons@jonathandavis,分享您对此次发布的看法。如果您遇到任何问题,我们欢迎您就 Safari UI 提供反馈,或就 Web 技术提交WebKit 错误报告。报告问题确实能带来改变。

下载最新的Safari 技术预览版,以便始终处于 Web 平台的最前沿并使用最新的 Web Inspector 功能。您还可以使用 WebKit 功能状态页面来关注您最感兴趣的 Web 功能的新信息。

更多内容

有关 Safari 15.5 中 WebKit 的更多信息,请阅读Safari 15.5 发布说明

这些功能首先在 Safari 技术预览版中发布:140141142143144145