这个项目能做什么
js-fair-consent 是一个开源的同意管理解决方案,专为希望尊重访客隐私、同时仍能合乎道德且合法地使用分析和营销工具的网站而设计。
该库提供了一个同意横幅(可通过 HTML 结构和 CSS 完全自定义),在加载任何分析脚本之前询问访客权限。一旦给予或拒绝同意,相应服务将异步且非阻塞地加载,遵循现代 Web 性能实践。
支持的分析提供商
- Google Analytics(通过 gtag.js),支持 Consent Mode v2(`consent-only` 或 `preload` 模式)
- Matomo,使用其原生同意 API(`requireConsent`、`rememberConsentGiven`、`forgetConsentGiven`)
- Umami,具有无预加载模式,避免稍后授予同意时重新渲染
- Hotjar,仅在获得营销或个性化同意时才有条件加载
主要功能
- 异步、延迟脚本加载,确保页面渲染从不被阻塞
- 自动尊重全球隐私控制 (GPC) 和禁止追踪 (DNT) 信号 — 检测到任一信号时,横幅隐藏且所有可选工具保持关闭
- 隐私设计默认值:在明确同意前不设置 Cookie,安全 Cookie 属性(`SameSite=Lax`、仅 HTTPS)
- 可选细粒度同意:访客可单独批准或拒绝各类别(分析、营销、个性化),而非单一的全有或全无选择
- CSP 安全:支持 `nonce` 和 `integrity` 属性,适用于严格的内容安全策略设置
- 内置国际化:默认提供英语和波兰语翻译,可扩展其他语言
- CDN 就绪:可直接通过 jsDelivr 或 GitHub Pages 分发
配置
该库通过传递给 `ConsentAnalytics.init()` 的简单 JavaScript 对象进行初始化。用户声明要支持的服务,提供其 ID(如 GA 测量 ID、Umami 网站 ID、Matomo URL 和站点 ID、Hotjar 项目 ID 和版本),并设置 `debug`、`locale` 和是否启用 `granular` 同意等选项。如果启用细粒度同意,存储的 Cookie 将成为一个 JSON 对象,将每个类别映射到其批准状态,每个服务在加载前检查相关类别值。
公共 API
该库暴露一小组方法供程序化访问:
- `ConsentAnalytics.hasConsent()` — 返回布尔值,指示是否已给予任何同意
- `ConsentAnalytics.readPrefs()` — 返回完整的同意偏好对象
- `ConsentAnalytics.writePrefs(prefs)` — 保存新的偏好状态
- `ConsentAnalytics.revokeConsent()` — 清除存储的同意并再次显示横幅
- `ConsentAnalytics.trackPageView()` — 手动触发页面浏览(对单页应用有用)
该项目采用 MIT 许可证,由 Rafał Masiarek 创建。
评论
0 评分人数达到10人后显示
登录后参与讨论。