这个项目能做什么

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 创建。