Page Visibility API 仅通知页面可见状态,不提供加密能力;需通过模糊化日志、限制监听器、HTTPS 安全上下文、多信号校验等措施保障隐私与安全。
HTML5 页面可见性变化(Page Visibility API)本身不提供加密能力,它只是通知页面是否处于前台或后台的简单状态变更。所谓“加密可见性数据”,实际是指在监听 visibilitychange 事件时,对相关行为或敏感信息进行安全处理,防止被恶意脚本窃取、滥用或用于用户追踪。核心不是加密 API 数据本身,而是控制数据使用方式与上下文安全性。
页面是否可见常被用于触发关键操作(如暂停视频、停止轮询、释放资源),但若这些操作间接暴露用户行为模式(例如:检测用户离开页面即自动提交未加密表单、记录精确切换时间戳用于画像),就构成隐私风险。
恶意第三方脚本可能劫持或伪造 visibilitychange 行为。应确保监听逻辑运行在受信上下文中,并最小化依赖外部输入。
addEventListener('visibilitychange', handler, { once: true }) 或手动移除监听器,避免内存泄漏与重复绑定unsafe-inline 和 unsafe-eval,
Visibility API 在非安全上下文(HTTP)中部分功能受限,且明文传输 visibility 状态易被中间人篡改或监听。必须确保:
document.visibilityState 可能返回 visible 即使实际不可见isSecureContext 属性,仅在安全上下文中启用依赖可见性的关键功能(如 WebRTC 唤醒、加密密钥派生)该 API 易被绕过(如浏览器调试工具强制修改 document.hidden、插件屏蔽事件、移动端分屏/画中画场景下状态不准确)。不能将其作为防录屏、防截图、防复制的核心机制。
不复杂但容易忽略:visibilitychange 是轻量级提示,不是加密开关,也不是访问控制门禁。真正要“加密”的,是开发者对这个信号的理解方式和后续动作设计。