屏幕和窗口指纹:显示属性追踪
区分屏幕、可用区域、窗口、布局视口、视觉视口、缩放和像素密度,不把显示观察当作永久身份。
BotBrowser Team
屏幕和窗口值与隐私相关,因为网页无需请求权限就能观察部分显示条件。它们可帮助适配布局,也可能为浏览器指纹补充上下文。分辨率、窗口大小或像素比只描述当前上下文公开的内容,不能证明某个人、操作系统、物理显示器或位置。位置本身由单独的权限控制,详见浏览器地理位置权限与位置精度。
BotBrowser 可在经授权的一致性测试中控制浏览器可见的显示值,但不会修改物理硬件或主机操作系统的显示状态。
TL;DR
screen.width报告浏览器公开的屏幕,window.innerWidth报告文档可用的布局区域,单独任何一个都不能识别显示器或窗口。availWidth与availHeight会因常驻系统界面、任务栏或远程会话占用空间而变小,这个差值的大小并不能说明是哪个系统占用的。devicePixelRatio跟随显示缩放和页面缩放,visualViewport.scale跟随捏合缩放,同一会话内两者都可能变化,而硬件并未改变。- 桌面 headed 会话中
--bot-screen与--bot-window默认取real;要应用已加载的配置文件,需把两者都设为profile,或传入显式的WxH或 JSON 值。
目录
观看视频
这段英文视频讲解网页读到的每个数值来自哪个显示表面,在本地受控测试中用可调整大小的框架代替窗口,并说明这些声明值能证明和不能证明什么。测试只使用一台主机上的一个浏览器版本,不使用 BotBrowser 配置文件,也不使用缩放,因此只说明各表面之间的关系,不代表任何真实显示器、主机或人。音轨为英文。
屏幕与可用区域
Screen 提供 width、height、availWidth、availHeight、colorDepth 和 pixelDepth。浏览器以 CSS 像素报告包含当前窗口的屏幕。可用区域可能排除持续存在的系统界面。这些是浏览器可见观察,不是硬件清单。多显示器、缩放、旋转、扩展坞、远程会话和无障碍设置都可能改变数值。可用区域差异不能识别操作系统或用户。
CSS 像素并不必然等于物理像素。媒体查询描述渲染条件,而非显示器序列号;样式特性如何被用于追踪,可参阅CSS 指纹:样式表如何追踪你。colorDepth 与 pixelDepth 也不能证明 HDR、完整色域或校准状态。
窗口、视口与缩放
window.innerWidth 和 innerHeight 描述布局视口,存在时包含垂直滚动条。outerWidth 和 outerHeight 描述浏览器公开的窗口边界。二者关系取决于浏览器界面、滚动条、窗口状态和平台。视觉视口是用户当前看到的部分,可能随移动端界面、屏幕键盘或捏合缩放变化。可用时 visualViewport 会以 CSS 像素报告该空间。
页面缩放和捏合缩放不同。前者可改变 CSS 布局比例和 devicePixelRatio,后者主要改变视觉视口。在不同缩放的显示器间移动窗口也可能改变像素比。这些都是当前条件,不是稳定身份。
隐私与响应式布局
屏幕、可用区域、视口、缩放和像素比的组合可以补充其他观察,但不能证明谁在使用浏览器或每个值来自哪个主机。只收集布局或支持所需的信息,不把显示清单变成账户身份。响应式布局应依据布局视口,不是整个屏幕:分屏窗口可能远小于 screen.width。
还应区分图像 CSS 尺寸与位图像素数。更高密度资源可以提升可读性,却不能证明显示器型号。保留重排、缩放和无障碍替代路径。键盘或缩小的视觉视口需要重新定位控件,而不是收集新的身份信号。
有界验证
比较等价流程,并记录 headed 或 headless 模式、视口、缩放和显示器布局。测试调整窗口、切换显示器、相关旋转或扩展坞、页面缩放、捏合缩放和移动端界面。API 不可用时保留正常路径。结果应说明可见行为、未知项与下一步,不能给用户分类。
用户放大页面时,表单应保留标签、焦点和提交操作。浮动控件应尊重键盘和可见内容。窗口移动后重绘 canvas 证明该流程的兼容性,不证明永久的多显示器配置。
BotBrowser 的能力与限制
BotBrowser 文档说明可通过配置文件控制网页看到的屏幕和窗口信息。在选定配置中,这可支持经授权的隐私和兼容性测试中的显示一致性。它只覆盖浏览器可见 API,不会修改物理硬件、主机操作系统显示设置或浏览器进程外的枚举。真实窗口模式可反映调整大小和多显示器状态。配置文件控制的 headless 值不保证与每个 headed 浏览器完全一致。应验证所选配置文件和运行时。
实践结论
核查顺序决定显示观察是否有意义。先写明任务依赖的表面(Screen、布局视口、视觉视口或 devicePixelRatio),再记录产生该值时的浏览器模式、窗口状态和缩放级别。只有这些条件一致,两次会话之间的比较才成立。
界面工作应以 window.innerWidth 决定布局,用 visualViewport 定位临时控件,并在该 API 缺失时保持文档可读。把 availWidth 与 availHeight 当作窗口可用空间的限制,而不是对平台的描述。
在经授权的 BotBrowser 检查中,加载目标配置文件,在 headed 会话里同时设置 --bot-screen=profile 与 --bot-window=profile,并在流程涉及的页面上确认被报告的值。显示值只说明浏览器上下文当时公开了什么,不识别主机、显示器或人。
来源
本文属于指南: 什么是浏览器指纹?原理、风险、信号与隐私边界