先检查 document.cookie 是否含 cookies_consent=true,有则隐藏提示条;否则显示固定底部 banner,“同意”按钮写入 path=/、365天有效期 cookie 并移除节点,“拒绝”设为 denied 且不阻断功能,撤回入口须显性提供。

用户点击“同意”后,document.cookie 才能写入(且需符合同源、Secure/HttpOnly 等策略),单纯在页面上显示提示条不等于合规 —— 关键是后续行为是否可控、可撤回。
怎么用原生 JavaScript 实现一个可关闭的底部 cookies 提示条
不需要框架,几行代码就能跑起来,重点是 DOM 操作时机和 cookie 写入逻辑要对得上。
- 先检查
document.cookie是否已包含同意标识(如cookies_consent=true),有则直接隐藏提示条 - 提示条用
<div id="cookies-banner"> 包裹,固定定位在底部:<code>position: fixed; bottom: 0; left: 0; width: 100%; z-index: 1000; - “同意”按钮绑定
click事件,调用setCookie()写入有效期为 365 天的标识,并移除 DOM 节点 - “了解更多”链接建议指向本地
/privacy.html或外部隐私政策页,别留空或 # - 推荐写法:
document.cookie = "cookies_consent=true; path=/; expires=" + new Date(Date.now() + 31536000000).toUTCString(); - 不要用
max-age:IE 不支持,移动端部分 WebView 也不稳定 - 如果站点启用了 HTTPS,务必加
Secure标志,否则 Chrome 会拒绝写入(控制台报Cookie “xxx” has been rejected because it is in a cross-site context) - “拒绝”按钮应设置
cookies_consent=denied,同样带path=/和expires - 后续所有非必要 cookie(如 Google Analytics、Facebook Pixel、广告跟踪脚本)必须检测该值,为
denied时跳过加载 - 注意:拒绝 ≠ 删除已有的第三方 cookie,只能约束你自己的脚本行为;用户仍需手动清浏览器 cookie
- 正确做法:动画结束后调用
banner.remove()(现代浏览器)或banner.parentNode.removeChild(banner)(兼容 IE11) - 如果用
visibility: hidden,记得同步把aria-hidden="true"加上,避免屏幕阅读器重复读取 - 别依赖
setTimeout猜动画时长,用transitionend事件更可靠
setCookie 函数必须带 path=/ 和 expires 参数
浏览器默认只在当前路径写 cookie,不设 path=/ 的话,换个子路径(比如 /blog/)就读不到同意状态,提示条会反复弹出。
用户点了“拒绝”,该怎么处理
GDPR 和 CCPA 都要求“拒绝”必须和“同意”一样容易操作,且不能影响基础功能 —— 你不能因此禁用 JS 或屏蔽整个网站。
为什么 CSS 动画收起后提示条还在 DOM 里
常见错误是只改 opacity 或 transform,但没真正移除节点或设 display: none,导致下次刷新仍触发显示逻辑。
最常被忽略的是“撤回同意”入口 —— 它得藏在隐私政策页里,但也要能在页脚或设置菜单中被快速找到;没有这个,整个提示条就只是装饰。











