大多数浏览器和
Developer App 均支持流媒体播放。
-
WKWebView 的新功能
探索 WKWebView 的最新更新,此框架能帮助将网页内容整合到您的 App 界面中。我们将介绍 JavaScript 全屏 API 的使用方法,探索 CSS 视口单位,并分享有关查找交互的更多信息。我们还将带您了解内容拦截控制的优化、嵌入加密媒体,以及如何使用 Web 检查器。
资源
相关视频
WWDC22
-
下载
♪ 柔和乐器演奏的嘻哈音乐 ♪ ♪ 大家好 欢迎来到 “WKWebView 的新功能” 我是 WebKit 组的工程师 Alex Christensen 今年我们增加了很多新的网络技术 供您在 App 中使用 不过 在我们开始之前 我们要确保 您的 App 使用了正确的技术 如果您希望无需深度定制就能在 App 中浏览 Web 内容 那么一定要试试 SFSafariViewController 如果您的 App 仍在使用 已弃用的 UIWebView 现在是时候迁移到更快且 更具响应性的 WKWebView 未来的版本中 将删除 UIWebView WKWebView 提供 API 用于 Web 内容和 App 之间交互 您可以将它用于 基于 CSS 的用户界面 或调用 JavaScript 编写 App 您可能在使用 App 绑定域 与自己的 Web 内容交互 您也可能正在开发自己的浏览器 无论您的 App 是什么 我们不断添加新功能以便您制作 更丰富的 Web App WKWebView 今年可用的新功能 分为四类 与 Web 内容交互的新方式 内容拦截器的新功能 加密媒体 以及 允许三方浏览器远程调试 Web 首先 我们将介绍 用于 Web 内容交互的 API iOS16 中 您的 App 可以通过以下三种新方式 与 Web 内容轻松交互: 使用全屏 API 使用新的 CSS 视口单元 以及使用查找交互 让我们先来看看全屏 API 一直以来 在浏览器中展示的视频 游戏等都可以通过 HTML 元素 使其实现全屏 现在 App 内嵌的 H5 页面中也可以做到这一点了 这是手机上的一个简单示例 JavaScript 可以 请求全屏 然后用户或 JavaScript 也可以退出全屏 您仅需要在您的 App 中 将 WKPreferences 的 .isElementFullscreenEnabled 属性 设置为 true 来加载网页内容 这些内容可以使用全屏 API 比如 webkitRequestFullscreen 这是开箱即用的API 效果也很好 如果您想要自定义过渡动画 可以通过监听 WKWebView 的 fullscreenState 来实现 该属性让 App 可以准确知道 网页内容何时全屏或返回 以上就是在 App 中使用 WebKit 全屏 API 的全部内容
我们也新增了 CSS 单位 可根据视口(Viewport)大小布局 Web 内容 这些新的 CSS 单位包括 svh lvh dvh 等 它们允许 Web 开发者根据 最小 最大和动态的视口大小 来修改 Web 布局 让我们看一下 Safari 浏览器的作用 以了解如何在您的 App 中使用 当首次在 Safari 浏览器中 打开 H5 页面时 能看到 H5 页面和一些底部按钮 滚动时 视口会随着 按钮的滚动而增大 Svh、lvh 和 dvh 提供有用的单位 来测量这些不同大小的视口 当 App 需要更改 WKWebView 视口大小 以便在 App 中 正确布局 Web 内容时 需要提前通过 WebKit 的函数 setMinimumViewportInset 方法来告知视口的大小范围 在 iOS 16 的 WKWebView 中 我们还引入了对查找交互的支持 许多使用了 WKWebView 的 App 加载了大量文本内容 并且用户想要搜索相应文本 如果将 WKWebView 的 .findInteractionEnabled 属性设置为 true 用户就可以 在页面上使用 CMD-F 等 快捷键来搜索文本 打开该功能 只需要一行代码 除此之外 还可以通过 WKWebView 的 findInteraction 属性 来访问 UIFindInteraction 对象 通过这个对象 来执行查找和关闭查找等操作 或者通过编码的方式 移动到上一个或者下一个查找结果 试试吧 看它可以在您的 App 中做什么 对于内容拦截器 我们在 WKContentRuleList 添加了一项新功能 用于在 Safari 浏览器中 实现内容拦截的 API 在这里 我们将维基百科 嵌入 H5 的 iframe 中 以前 您可以在被请求的 URL 和顶部框架 URL 上运行正则表达式 以决定是拦截加载还是执行其他操作 但是 有时候 您真正想要的是某个规则 仅适用于 某些 iframe 内的加载 现在您可以在当前框架的 URL 上运行正则表达式 我们将编写一条规则 来拦截维基百科中的图像呈现 首先 在 JSON 规则的 trigger 中 添加新增的 if-frame-url 键 并将其应用于 WKWebViewConfiguration 然后在发出请求的 URL 上 运行正则表达式 此拦截规则现在仅适用于来自匹配 if-frame-url 正则 表达式的框架的请求 在这里我们看到它 成功的拦截了维基百科的图像 如果您想要了解更多 实施内容拦截器的内容 建议查看有关 Safari 浏览器 扩展的 WWDC 讲座 该讲座包含了有关 declarativeNetRequest 的一些新可能性 iPadOS 16 中的 WKWebView 中 还新增了一个功能 即加密媒体 如果您有相关使用加密媒体扩展 和媒体源扩展 API 的经验 现在可以在 iPadOS 上的 App 中使用 这意味着 如果您拥有 AppleTV+ 等优质内容 它将像 macOS 中一样 在 iPadOS 上工作 如果您的 App 有 Web 浏览器权限 允许三方浏览器远程调试 Web 将会像在 iOS 上的 Safari 一样正常工作 无需添加任何代码或更改任何代码 就可调试 Web 页面 调试流程与 Safari 浏览器一样 首先在 iOS 设备中 开启 Web Inspector 然后在 macOS 上的 Safari 浏览器的高级设置中 启用开发菜单 将手机连接到 Mac 并在 macOS 上的 Safari 浏览器浏览器的 开发菜单中查找您的设备 Web 检查器有许多 用于调试 Web 内容的工具 您可以探索 DOM 运行和调试 JavaScript 的执行 查看页面加载的时间线等 如果您有网站 您现在可以试着开启 Web 检查器 实现在第三方浏览器中 调试 App 内嵌的 Web 页面 以上就是今年 WKWebView 的新增 API 试用一下 看看 它们能在您的 App 中做什么 请为您的 App 使用最好的 API 如果您认为 WKWebView 仍有还需完善的功能 请使用反馈助理提交功能请求 我们会查看收到的功能请求 并根据您的建议确定开发的优先次序 别忘了观看 “Safari Web 扩展的新功能” 如果想要了解 Web 平台的 更多内容 请查看 “Safari 和 WebKit 的新功能” 感谢观看 祝您 WWDC 愉快 ♪
-
-
2:26 - Fullscreen API support
webView.configuration.preferences.isElementFullscreenEnabled = true webView.loadHTMLString(""" <script> button.addEventListener('click', () => { canvas.webkitRequestFullscreen() }, false); </script> … """, baseURL:nil) let observation = webView.observe(\.fullscreenState, options: [.new]) { object, change in print("fullscreenState: \(object.fullscreenState)") }
-
3:50 - CSS viewport unit range inputs
let minimum = UIEdgeInsets(top: 0, left: 0, bottom: 30, right: 0) let maximum = UIEdgeInsets(top: 0, left: 0, bottom: 200, right: 0) webView.setMinimumViewportInset(minimum, maximumViewportInset: maximum)
-
4:17 - Using UIFindInteraction with WKWebView
webView.findInteractionEnabled = true if let interaction = webView.findInteraction { interaction.presentFindNavigator(showingReplace:false) }
-
5:46 - WKContentRuleList if-frame-url
let json = """ [{ "action":{"type":"block"}, "trigger":{ "resource-type":["image"], "url-filter":".*", "if-frame-url":["https?://([^/]*\\\\.)wikipedia.org/"] } }] """ WKContentRuleListStore.default().compileContentRuleList(forIdentifier: "example_blocker", encodedContentRuleList: json) { list, error in guard let list = list else { return } let configuration = WKWebViewConfiguration() configuration.userContentController.add(list) }
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。