
在过去的两年中,AMP 项目一直与 Igalia 合作,找出 iOS WebKit 中的错误和缺失功能,然后修复它们。我们创建重现案例、编写网络平台测试、执行调试和分析,当然,还编写补丁来实际修复问题。我们认为这是一项特别有意义的工作,因为它有助于我们更快地实现目标,而且还让网络对所有开发者来说都更具可预测性。
在这篇博文中,我们概述了 2018 年完成的工作,并提供了有关改进何时会在 iOS 版本中提供或何时需要由 Apple 处理的提示。其中一些工作仍在进行中,我们不断提出新想法和报告错误。
iOS 12.1
我们提交了以下错误的补丁,这些错误现已在最新的 iOS 12.1 版本中修复
- 确保“查找”用户界面的突出显示文本显示在页面中间
- 允许使用 JavaScript 取消设置具有 !important 规则的 CSS 过渡属性
- 对动画代码的各种修复,包括 错误 170784 和 错误 186129。
此外,Igalia 还协助 Apple 改进了自定义元素。此问题已在最新的 iOS 12.1.1 beta 版本中修复
- 当自定义元素断开连接时不调用 connectedCallback。对于其他类似用例,例如 错误 183586 或 问题 760,WebKit 的行为实际上是正确的。
iOS 11
我们一直在关注一些改进,并确认它们已包含在最新的 iOS 11 版本中。这两项工作均由 Igalia 在 2017 年完成,这要归功于 AMP 项目的支持
- 改进 框架沙盒,包括实现新的 沙盒属性值,例如 allow-popup-to-escape-sandbox、allow-top-navigation-without-user-activation 和 allow-modals 标志。
这允许应用更安全地将广告沙盒起来,以防止其执行不良操作。 - 修复了在启用触摸滚动时 iframe 中固定定位元素的闪烁问题。请参见 错误 175135
由我们分类的这些错误已由其他 WebKit 开发人员修复
- 确保 iframe 在方向更改时正确调整大小.
- 修复导致启用触摸滚动时溢出节点内容未绘制的回归问题.
- 让“朗读所选内容”功能在 iframe 中工作.
- 解决滚动捕捉的各种问题。具体来说,请参见错误 160622、错误 158821和错误 170560
- 防止在“播放”图标上滑动以启动视频.
- 添加对链接预加载的支持。请参见错误 158720。
WebKit 主干
我们与 Igalia 和 Google 的 Web 平台工程师合作,在 WebKit 主干中提供了以下功能。Apple 不对未来版本发表评论,但我们会持续关注它们,以验证这些改进何时会出现在 iOS 版本中。
- 当内容动态调整为溢出时,让启用触摸滚动的溢出节点可滚动.
- 当触摸滚动开启时,防止 iframe 中固定定位元素跳动。
- 在文档根/正文上实现 scroll* API 的标准行为,以便 WebKit 与 Firefox、Chromium 和 Edge 的行为相匹配。这目前处于首选项标记下,但Apple 很乐意在未来在 Safari 中启用它。
- 支持Intersection Observer,目前已取得很大进展,但处于首选项标记下。请参见错误 159475。
由 Apple 处理
Apple 一直致力于两项对 AMP 来说很有趣的大功能
经过分析和讨论,我们得出结论,以下问题将由 Apple 修复
- 将 window.top 重定向到 itunes URL或更好地处理下载属性,这两个都涉及 Safari 中的专有代码来决定打开链接的应用程序。
- 暂停动画时保留变换矩阵,这可能需要更改专有 CALayer 的 addAnimation。
- WKWebView 支持 contentInset,这需要更改 WKWebView。
正在进行中
我们正在与 Igalia 合作进行以下改进,其中一些补丁已经可用
- 支持 scrollIntoView/scrollTo/scrollBy 的平滑 ScrollBehavior。您可以观看此视频进行快速演示。
- 允许通过 MessageChannel 传递用户手势.
- iOS 框架滚动。我们仍在与 Apple 协调以获得当前补丁的审查。您可以查看我们今年年初制作的视频。
- 致力于在 DOM、 XMLHttpRequest 和 fetch领域修复 Web 兼容性。
结论
我们很高兴继续与 Igalia 和其他浏览器开发人员合作,以不断改进 WebKit 的 Web 平台实现。明年,我们计划继续努力完成当前任务,但我们还有各种其他与网络、UI 等相关的想法。敬请期待!
发布者:Frédéric Wang,Igalia 的浏览器工程师