Safari Technology Preview 62 中的 ITP 调试模式

我们从开发者那里收到的关于 Safari 智能跟踪预防 (ITP) 的常见问题之一是:在启用 ITP 的情况下如何调试您的网站,尤其因为它在 Safari 中默认是启用的。今天我们很高兴向您展示 ITP 调试模式的实验版本。请试用并向我们发送反馈。

启用 ITP 调试模式

以下是在 Safari Technology Preview 62 中启用 ITP 调试模式的方法

  1. 点击 Safari Technology Preview 菜单 → 偏好设置 → 高级
  2. 勾选“在菜单栏中显示‘开发’菜单”旁边的复选框,启用“开发”菜单
  3. 点击“开发”菜单 → 实验性功能 → ITP 调试模式

使用后禁用 ITP 调试模式

ITP 调试模式仅应用于主动调试您网站的智能跟踪预防行为时使用。调试完成后,请务必禁用 ITP 调试模式。为什么?

出于隐私原因,ITP 调试模式以 INFO 级别记录日志,以确保域名不写入持久性日志文件。如果您启用 ITP 调试模式后未禁用,在运行某些系统诊断工具(例如抓取 sysdiagnose)时,您的日志中有可能包含隐私敏感的域名。

由智能跟踪预防分类的域名

启动 Safari Technology Preview 时,ITP 调试模式会记录哪些域名已被 ITP 分类为具有跨站跟踪能力。要查看这些日志,请执行以下操作

  1. 退出 Safari Technology Preview
  2. 使用“控制台”应用或“终端”应用过滤 ITP 调试模式的日志消息
    1. 如果您偏好使用“控制台”应用
      1. 启动“控制台”应用
      2. 点击“操作”菜单 → 包含信息消息
      3. 过滤“ResourceLoadStatisticsDebug”(不含引号)
    2. 如果您偏好使用“终端”
log stream -info | grep ResourceLoadStatisticsDebug
  1. 启动 Safari Technology Preview

您现在将在一条或多条日志语句中看到 ITP 已分类为具有跟踪能力的域名,例如

About to block cookies in third-party contexts for: 3rdpartytestwebkit.org.

在 ITP 调试模式下,3rdpartytestwebkit.org 已设置为始终被分类为跟踪器,您可以使用它来测试诸如 Storage Access API 等功能。

根据您从头开始(参见下面的“从头开始”部分)浏览了多少,您会在这些日志语句中看到从只有 3rdpartytestwebkit.org 到数百个域名不等的内容。

浏览网页时的进一步日志记录

好的,您已经启用了 ITP 调试模式,设置了“控制台”或“终端”来捕获正确的日志,启动了 Safari Technology Preview,并看到了初始的 ITP 调试模式日志。从此之后,只要智能跟踪预防做出新的决定,您就会看到新的日志语句。

例如,当它清除网站数据时

About to remove data records for tracker.example, another-tracker.example.

当它将新域名分类为具有跟踪能力时

About to block cookies in third-party contexts for: a-third-tracker.example.

或者,当调用 Storage Access API 后提示用户时

About to ask the user whether they want to grant storage access to 3rdpartytestwebkit.org under news.example or not.

分类用于测试的自定义域名

我们从开发者那里收到的一个具体请求是手动将自定义域名永久分类为具有跟踪能力。通过 ITP 调试模式和 User Defaults,现在可以实现这一点。打开“终端”并执行以下命令(此示例将 example.com 设置为永久分类)

defaults write com.apple.SafariTechnologyPreview ResourceLoadStatisticsManualPrevalentResource example.com

在启用 ITP 调试模式的情况下启动 Safari Technology Preview 时,您现在会在“控制台”或“终端”中看到这条新增的日志语句

Did set example.com as prevalent resource for the purposes of ITP Debug Mode.

您可以在“终端”中这样检查设置

defaults read com.apple.SafariTechnologyPreview ResourceLoadStatisticsManualPrevalentResource

您可以这样删除设置

defaults delete com.apple.SafariTechnologyPreview ResourceLoadStatisticsManualPrevalentResource

从头开始

在智能跟踪预防下进行调试时,通常从头开始很有用。您可以通过删除所有 Safari Technology Preview 历史记录来实现。这不仅会删除历史记录和网站数据,还会重置 ITP。清除历史记录也会通过 iCloud 同步到其他设备。为了避免这种情况,我们建议在您的 macOS 系统上创建一个新用户,专门用于调试智能跟踪预防。但要小心。如果您正在调查一个由真实浏览活动导致的问题,重置 ITP 可能会阻止您重现该问题,因为 ITP 的所有数据都会被删除,并且导致该问题的真实浏览活动可能无法重现。

在 ITP 调试模式下,即使您删除了历史记录,通过 User Defaults 设置的 3rdpartytestwebkit.org 和任何自定义域名仍会保持分类状态。这种行为为受控的、可重复的测试提供了保障。

反馈和 Bug 报告

请使用 WebKit Bug 跟踪器 bugs.webkit.org 报告有关 ITP 调试模式的 Bug,并将反馈发送给我们的宣传员 Jon Davis。如果您对使用 ITP 调试模式进行调试有技术问题,可以在 Twitter @johnwilander 上找到我。