You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Safari普通模式与隐私模式下window.screen.height和window.screen.availHeight取值存在差异?

为何Safari普通模式与隐私模式下window.screen.height和window.screen.availHeight取值存在差异?

嘿,这个问题我之前在帮同事调试Safari兼容问题时刚好碰到过,先帮你把场景和观察到的数值理清楚,再拆解原因~

首先先确认你触发这个差异的前提条件:

  • 仅打开一个标签页
  • 浏览器窗口铺满整个显示器
  • 开发者控制台放在独立窗口中

然后是你观察到的具体数值差异:

普通模式下:
window.screen.availHeight = 1068,window.screen.height = 1112(两个值的差刚好是Mac顶部菜单栏的常规高度,也就是系统预留的非可用空间)
隐私模式下:
window.screen.availHeight = 1001,window.screen.height = 1001(两个值完全一致)

接下来讲核心原因:
这其实是苹果给Safari隐私模式加的隐私保护小设计——目的是防止网站通过屏幕尺寸这类细微参数给你打“唯一标签”(也就是行业里说的指纹追踪),以此悄悄识别你的浏览行为。

具体到你的场景:

  1. 普通模式下,Safari会老老实实返回屏幕的真实总高度(1112),以及减去系统菜单栏、Dock栏(哪怕你隐藏了Dock,系统底层还是会预留其高度)后的可用高度(1068),这是浏览器的标准行为。
  2. 隐私模式下,Safari会故意模糊屏幕尺寸的真实值:它不会返回屏幕的真实总高度,而是返回当前浏览器窗口实际占用的高度(也就是你看到的1001),同时把availHeight也同步成这个值。这样一来,网站就没法通过屏幕尺寸的细微差异区分你是在普通还是隐私模式下浏览,也没法结合其他参数生成唯一的用户指纹。

你说外部看起来浏览器控制面板尺寸没区别、Dock也隐藏了,这很正常——因为这个尺寸调整是系统层面的隐私模糊处理,不会体现在视觉UI上,只会通过JavaScript API返回修改后的值。

备注:内容来源于stack exchange,提问作者Андрей Люлекин

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 14:44:38