大多数浏览器和
Developer App 均支持流媒体播放。
-
Safari 扩展的新动向
了解 Safari 扩展的最新升级。我们将介绍全新的 API,详解 Safari 浏览器 App 扩展基于站点的授权,并与你分享如何确保扩展在无痕浏览和配置文件中都能顺利运行。
资源
- Adding a web development tool to Safari Web Inspector
- Developing a Safari Web Extension
- MDN Web Docs - Web Extensions API
- Safari Release Notes
- Submit feedback
相关视频
WWDC23
WWDC22
WWDC21
-
下载
♪ 悦耳的器乐嘻哈 ♪ ♪ David Johnson:大家好 欢迎来到 “Safari 扩展的新动向”讲座 我是 David Johnson Apple 的 Safari 扩展工程师 今天 我很高兴能向你介绍近期 Safari 扩展的新动态 以及用户体验 和新功能方面的重点升级 首先 我们想向开发者致谢 到目前为止 开发者已经在 App Store 上构建 并分享了 2000 多个 Safari 扩展 iOS 平台上对 Safari 扩展的需求 尤其令人印象深刻 自从 WWDC21 引入以来 它们经常出现在 App Store 的热门分类中 你的扩展强化了用户在 macOS、iOS 和 iPadOS 上的自定义浏览体验 有四种方法可以 构建 Safari 扩展: 内容拦截器、共享扩展、 App 扩展和网页扩展 Safari 浏览器 17 依然支持上述所有类型 但浏览器自定义的未来 在于网页扩展 Apple 致力于 和其他主流浏览器供应商 共同进行网页扩展的标准化工作 这项合作的目标在于提高兼容性、 精简开发流程 并确保用户在所有浏览器中 获得相似的体验 我们一起在 W3C WebExtensions Community Group 中工作 Apple 也自豪地 担任该组织的联合主席 通过与其他浏览器 和扩展开发者建立联系 共同推动标准化的进程 我们将建立更强大、更统一的 网页扩展生态系统 在开始今天的话题之前 我想与你分享 Safari 浏览器网页扩展的 两项关键细节 首先 Safari 浏览器 17 将继续支持 Manifest V2 和 V3 网页扩展 我们将继续为 Manifest V3 添加新功能 因此 请你在认为对 扩展有必要时进行升级 第二 网页扩展是在各个平台 构建 Safari 扩展的最佳方式 只需要一个共享代码库 网页扩展就能让你 在 iOS、iPadOS、macOS 以及现在的 xrOS 上 自定义 Safari 浏览器的功能 没错 在 iOS 和 iPadOS 可用的网页扩展 也将适用于 xrOS xrOS 网页扩展的 运行方式与你期望的一样 而且它和 iOS 扩展有相同的功能 包括注入脚本、 运行后台内容以及展示弹出框 我们很期待看到你的扩展 为 xrOS 浏览体验带来的提升 如想进一步了解 xrOS 平台上 Safari 浏览器的信息 请查看 “认识面向空间计算的 Safari 浏览器” 说完上面这些 接下来是我们今天讲座的几项内容 首先 我们将探讨几种 新增和升级的扩展 API 以及它们将如何强化 Safari 扩展的功能 接下来要谈的是基于站点的 Safari 浏览器 App 扩展授权 它可以让用户更大程度 掌控自己的浏览体验 最后 我们将看看如何确保 与 Safari 浏览器描述文件 以及无痕浏览相兼容 首先是新的扩展 API 内容拦截器是是清理网页、 移除骚扰和阻止脚本加载的好方法 内容拦截器使用 JSON 中定义的使用规则 来阻止或隐藏内容 无需获知 访问了哪些网站 网页上的声明式 隐藏内容会相对复杂一些 因此内容拦截器 现已支持 :has() 选择符 :has() 选择符非常有用 因为它们允许 内容拦截器基于子元素 精准定位其父元素 在这个规则示例中 我们将隐藏所有带 .post 类并同时包含 .paid-promo 类子元素的元素 隐藏网页内容 或阻止网络请求的扩展 是一些最受欢迎的扩展类型 因此 Safari 浏览器 将继续支持开发者 构建创新和高效的扩展 为用户提供安全无痕的 浏览体验 如果你希望使用网页扩展 阻止或修改网络请求 请查看以下针对 Declarative Net Request 的更新 Declarative Net Request 是一种强大的 API 为你的网页扩展提供 阻止和修改网络请求的方法 和内容拦截器类似 你的扩展在一个 JSON 格式中 提供规则 其他都交给 Safari 浏览器来处理 这意味着电量效率得到了提升 尤其是在电池供电的设备上 由于这些规则是声明式的 因此你的扩展不需要获取 用户访问的网页 提升了隐私性和安全性 Declarative Net Request 在 Safari 浏览器 16.4 上的 另一项重大升级是: 你的扩展现在可以修改请求标题 在这个示例中 我定义了一项操作 为所有对 example.com 发起的请求 设置自定义 User-Agent 标题 除了设置标题 这个操作类型还可以添加新值 以修改标题、移除现有值 甚至从 HTTP 请求中 完全移除标题 修改网络请求是一个强大的工具 并且你需要牢记一些关键点 首先 你必须在清单中 声明 declarativeNetRequest WithHostAccess 进行授权 在 Safari 浏览器 16.4 中 重定向操作现在 也需要进行此授权 你的扩展必须得到基于站点的授权 才能应用所有 修改标题或重定向操作 这确保了用户能以站点为单位 控制自己的数据 记住以上这些考量因素 你就可以构建出强大且隐私良好的 内容阻止扩展 为用户提供按需定制的体验 如果你构建的扩展 使用 Declarative Net Request 你或许会想让用户知道 它阻止了多少请求 使用全新的 declarativeNetRequest .setExtensionActionOptions API 你就可以配置识别证文本 来展示操作次数 例如阻止加载的次数 在这个示例中 我们设置 displayActionCountAsBadgeText 选项为 True 这是该 API 目前的唯一选项 你的扩展识别证将基于发生的操作 自动进行更新 这让你的用户可以轻松监测 扩展的活动和效能 同时确保浏览历史记录不受窥探 现在我将介绍 一项针对脚本 API 的更新 让你能够 在更大程度上掌控扩展行为 使用 registerContentScript 系列 API 你可以创建内容脚本 这些脚本能通过编程方式 注册、更新或移除 这意味着你可以将特定页面或条件 作为目标来应用内容脚本 在此示例中 我正在注册一个脚本 准备注入匹配 webkit.org 的页面中 脚本注册也将在会话间持续 这一新 API 进一步扩充了 扩展清单中定义的静态内容脚本 让你可以更灵活地管理内容脚本 并为你的扩展创建 更多高级功能 Safari 浏览器 16.4 也为网页扩展 新增了存储区域:会话存储区 从会话存储区存取数据 使用和其他存储区域类似的函数 该 API 让你可以 在浏览器会话进行时 将数据存储到内存中 更便捷、更高效地 在非持续后台页面加载 之间访问数据 和本地存储不同 会话存储不会永久保存在磁盘中 并且会在 退出 Safari 浏览器时被清除 这就让会话存储非常适合 保存敏感或与安全相关的数据 例如解密密钥或授权令牌 这些不应当保存在本地存储中 最后 我们知道确保你的扩展 具备适合不同 UI 元素的图标尺寸 非常麻烦 因此 从 Safari 浏览器 16.4 开始 你可以创建各种尺寸都美观的 单个 SVG 图标 Safari 会迅速 调整你扩展图标的尺寸 让你专注于其他工作 这些 API 的更新 仅仅是 Safari 扩展 今年升级的一部分 现在 我们来谈谈 Safari 浏览器 App 扩展 以及基于站点的授权 你可能已经熟悉基于站点的授权 在网页扩展中的运用 它们在 App 扩展中用法也与之相同 用户可以在浏览网站时 授予扩展访问权限 这可以提供更强大的 隐私保护和控制能力 在扩展首次启动时 并不能访问任何用户查看的网站 扩展第一次尝试访问网页时 Safari 浏览器会标记 该扩展的工具栏项目 提醒用户该扩展想获取 访问当前页面的权限 用户点击此工具栏项目时 将看到扩展将获取哪些内容 并得到两个选项: 在“当天允许”和“始终允许” 授权完成后 扩展的工具栏项目 将显示颜色 表明该扩展 已拥有访问当前页面的权限 如果你升级到 Safari 浏览器 17 并已开启 Safari 浏览器 App 扩展 那所有对扩展的授权也将随之迁移 用户也将看到一条 提高隐私等级选项的横幅 如果选择询问每个网站 所有 Safari 浏览器 App 扩展的权限将被重置 用户将可以在访问每个网站时 分别为你的扩展授权 在 Safari 浏览器 17 中 并不需要采用新的 API 来支持这一更改;但是 请你花点时间回顾扩展的假设 并测试你的扩展在 Safari 浏览器 17 中表现如何 你的用户将完全掌控 每个 Safari 浏览器 App 扩展 可以访问哪些网页 用户进行授权后 你的扩展将 自动获取访问网站的权限 但是 权限可以随时授予或取消 现在 所有扩展的 工具栏项目都默认显示 请查看你的扩展图标 在 Safari 浏览器中的外观 并提供 PDF 矢量图标 使颜色正确显示 最后 我们来谈谈扩展在 描述文件和无痕浏览中有哪些升级 在 Safari 浏览器 17 中 用户可以控制扩展 对无痕浏览窗口和标签页的访问 而无需在其他浏览环境中 关闭扩展 可以注入脚本 或者读取用户访问网页信息的扩展 将默认为关闭 但是 不获取内容的扩展 例如内容拦截器 将在无痕浏览中自动开启 因为它们不会 带来更多隐私方面的忧虑 这是 macOS 上 Safari 浏览器 设置中更新的扩展窗格 iOS 上也有类似的更新 其中新增了允许该扩展 在无痕浏览中运行的选项 对于已经开启的扩展 只需在 Safari 浏览器 设置中点击一次 就可以允许扩展在无痕浏览中运行 描述文件是 Safari 浏览器 今年新推出的功能 这是一种浏览数据分门别类的方法 描述文件包含区分开的 历史记录、Cookie 和网站数据 用户也可以选择在每个 描述文件中开启哪些扩展 包括新的标签页扩展 当然 这些设置都将通过 iCloud 在用户的 iPhone、 iPad 和 Mac 进行同步 Safari 浏览器中的扩展窗格 也进行了更新 列举了 扩展在哪些描述文件中生效 在这里 你可以看到 Sea Creator 扩展 在工作和学校描述文件中都生效 扩展在描述文件中开启时 就成为了该扩展的新实例 也就是说每个实例 都会有不同的 UUID、 后台页面和存储 但是 基于站点的授权 由所有描述文件共享 这意味着你的用户只需 为扩展进行一次授权 当扩展在一个描述文件中运行时 它只能访问窗口、标签页 以及其他与该描述文件相关的数据 如果你的扩展 与本地主机 App 进行通讯 请确保你的 App 知悉它将从 多个描述文件处收到信息 并尊重不同描述文件间数据的区隔 如果你的 App 收到了对 beginRequest(with context) 的调用 请对 userInfo 字典进行解码 如果你的扩展在描述文件中开启 就会有一个适用于 SFExtensionProfileKey 键值的 描述文件标识符值 由于扩展在每个 描述文件中都有唯一实例 所以你可以分别检查 它们的后台内容 从 Safari 浏览器 17 的 “开发”菜单 你可以进入 网页扩展后台内容菜单项 并看到以扩展分组的后台页面 和服务角色 每个扩展会将 可检查的内容分描述文件列出 如想进一步了解 今年 Safari 浏览器 开发者功能升级的信息 请查看“网页检查器新动向” 和“重新发现 Safari 开发者功能”讲座 总之 Safari 浏览器 致力于标准化网页扩展 并提供全新 API 助你构建创新 和高效的扩展 我们热切期盼你加入 WECG 共同探讨和创造 网页扩展的未来 有了针对 App 扩展的 基于站点的授权 和对例如 :has() 选择符这样的 新功能的支持 你可以构建出为用户提供安全、 无痕浏览体验的扩展 请别忘了更新你的扩展 以充分利用这些新功能 并确保它们在描述文件 和无痕浏览中顺利运行 最后 请你在 Safari 浏览器 17 中测试扩展时 通过反馈助理提供反馈建议 感谢你的聆听 希望你享受 WWDC 的其他内容 ♪
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。