首页网文心情网络杂谈网站添加访问时 跳出美观易用的 Cookie同意弹窗

网站添加访问时 跳出美观易用的 Cookie同意弹窗

分类网络杂谈时间2026-08-14 20:29:46发布heikeyh浏览12
导读:网站要加Cookie同意弹窗了。起因是收到Microsoft Clarity的邮件,说2025年10月31日起欧洲经济区等地区强制要求Cookie同意。虽然我的站主要面向国内用户,但毕竟也有海外华人访问,Clarity的统计功能还是要用的。这篇文章记录我给网站加Cookie弹窗的完整过程。仅对于开放全球访问的站点来说这个有用,但仅允许国内访问的站点来说没有用...

网站要加Cookie

同意弹窗了。起因是收到Microsoft Clarity的邮件,说2025年10月31日起欧洲经济区等地区强制要求Cookie同意。

虽然我的站主要面向国内用户,但毕竟也有海外华人访问,Clarity的统计功能还是要用的。这篇文章记录我给网站加Cookie弹窗的完整过程。

仅对于开放全球访问的站点来说这个有用,但仅允许国内访问的站点来说没有用,因为国内目前还没有这个需求,大部人都不知道有这个。

随着全球对用户隐私保护的重视程度不断提高,像欧盟的GDPR、加州的CCPA这些法律法规,

都对网站使用Cookie提出了严格的要求。简单来说,就是网站不能再偷偷摸摸地收集用户的Cookie信息了,

必须先得到用户的明确同意。比如统计,广告,各种三方涉及用户隐私的功能 等。

但问题来了,怎么设计这个Cookie弹窗,才能既满足法规要求,又不让用户觉得烦呢?我可不想因为一个弹窗,

把用户都吓跑了。于是,我开启了漫长的找模板之旅,终于,让我发现了这个宝藏!它的样式清新简洁,

没有那些花里胡哨的设计,看起来就很舒服。而且,代码结构也比较清晰,对于我这种开发半吊子来说,

稍微修改一下就能适配我的博客风格。

download.jpg

弹窗实现代码

代码来自:https://www.codingnepalweb.com/popup-cookies-consent-box-html-css-javascript/

HTML:原始的SVG图标是谷歌图标,由于部分地区可能拦截,所以直接放在HTML中了

<!-- Cookie Consent弹窗HTML -->
<div class="wrapper">
  <header>
    <svg viewBox="0 0 1024 1024" aria-hidden="true">
      <path d="M160 256A96 96 0 0 1 256 160h512A96 96 0 0 1 864 256v336.384a38.4 38.4 0 0 0-38.144-8 38.464 38.464 0 0 0-25.856-20.416V384h-576v384a32 32 0 0 0 32 32h307.968c2.56 11.392 10.24 20.8 20.48 25.856a38.4 38.4 0 0 0 7.936 38.144H256A96 96 0 0 1 160 768V256zM256 224a32 32 0 0 0-32 32v64h576V256a32 32 0 0 0-32-32H256z" fill="#6172AC"></path>
      <path d="M670.464 504.512a96 96 0 0 1-109.952-88.32 179.776 179.776 0 0 0-228.096 172.928 179.584 179.584 0 0 0 230.592 172.224v-42.496a38.4 38.4 0 0 1 21.376-34.432 38.272 38.272 0 0 1-1.152-4.224A115.584 115.584 0 1 1 509.632 473.6a160 160 0 0 0 21.952 36.224 29.632 29.632 0 0 0 44.992 38.528c14.912 8.576 31.36 14.848 48.832 18.24a116.48 116.48 0 0 1-0.384 46.976l19.968-19.904a38.4 38.4 0 0 1 39.424-9.28 38.528 38.528 0 0 1 6.656-9.472 178.56 178.56 0 0 0-20.608-70.4z" fill="#387CFF"></path>
      <path d="M479.744 581.184a32.064 32.064 0 1 1-64.192 0 32.064 32.064 0 0 1 64.192 0zM583.936 646.4a33.088 33.088 0 1 1-66.176 0 33.088 33.088 0 0 1 66.176 0zM616.32 833.664a6.4 6.4 0 0 0 0 9.024l51.264 51.328a6.4 6.4 0 0 0 9.088 0l24.832-24.832a6.4 6.4 0 0 1 10.944 4.48v35.2a6.4 6.4 0 0 0 6.4 6.4h72.576a6.4 6.4 0 0 0 6.4-6.4v-35.2a6.4 6.4 0 0 1 10.944-4.48l24.896 24.832a6.4 6.4 0 0 0 9.024 0l51.328-51.328a6.4 6.4 0 0 0 0-9.024l-24.832-24.896a6.4 6.4 0 0 1 4.48-10.88h35.2a6.4 6.4 0 0 0 6.4-6.4v-72.64a6.4 6.4 0 0 0-6.4-6.4h-35.2a6.4 6.4 0 0 1-4.48-10.88l24.832-24.96a6.4 6.4 0 0 0 0-8.96l-51.328-51.392a6.4 6.4 0 0 0-9.024 0l-24.896 24.896a6.4 6.4 0 0 1-10.88-4.48v-35.2a6.4 6.4 0 0 0-6.4-6.4h-72.64a6.4 6.4 0 0 0-6.4 6.4v35.2a6.4 6.4 0 0 1-10.88 4.48l-24.96-24.896a6.4 6.4 0 0 0-8.96 0l-51.392 51.328a6.4 6.4 0 0 0 0 9.088l24.896 24.832a6.4 6.4 0 0 1-4.48 10.944h-35.2a6.4 6.4 0 0 0-6.4 6.4v72.576a6.4 6.4 0 0 0 6.4 6.4h35.2a6.4 6.4 0 0 1 4.48 10.944l-24.896 24.896z m138.88-8.96a69.568 69.568 0 1 1 0-139.136 69.568 69.568 0 0 1 0 139.2z" fill="#387CFF"></path>
    </svg>
    <h2>Cookies 同意</h2>
  </header>
  <div class="data">
    <p>本网站使用cookies来帮助您在网站上获得更好和更相关的浏览体验。 <a href="/privacy-policy">隐私政策</a></p>
  </div>
  <div class="buttons">
    <button class="button" id="acceptBtn">接受</button>
    <button class="button" id="declineBtn">取消</button>
  </div>
</div>

CSS:我去除了字体控制,弹窗改为左下角显示及弹出收入抽屉

/* Cookie Consent 弹窗样式 */
.wrapper {
  position: fixed;
  bottom: 50px;
  left: -370px;
  max-width: 345px;
  width: 100%;
  background: #fff;
  border-radius: 8px;
  padding: 15px 25px 22px;
  transition: left 0.3s ease;
  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1);
  z-index: 9999;
}
.wrapper.show {
  left: 20px;
}
.wrapper header {
  display: flex;
  align-items: center;
  column-gap: 15px;
}
.wrapper header svg {
  width: 48px; 
  height: 48px; 
}
.wrapper header h2 {
  color: #4070f4;
  margin: 0;
}
.wrapper .data {
  margin-top: 16px;
}
.wrapper .data p {
  color: #333;
  margin: 0;
}
.wrapper .data p a {
  color: #4070f4;
  text-decoration: none;
}
.wrapper .data p a:hover {
  text-decoration: underline;
}
.wrapper .buttons {
  margin-top: 16px;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.wrapper .buttons .button {
  border: none;
  color: #fff;
  padding: 8px 0;
  border-radius: 4px;
  background: #4070f4;
  cursor: pointer;
  width: calc(100% / 2 - 10px);
  transition: all 0.2s ease;
}
.wrapper .buttons #acceptBtn:hover {
  background-color: #034bf1;
}
.wrapper #declineBtn {
  border: 2px solid #4070f4;
  background-color: #fff;
  color: #4070f4;
}
.wrapper #declineBtn:hover {
  background-color: #4070f4;
  color: #fff;
}

JS:这部分主要负责实现Cookie弹窗的显示、隐藏以及Cookie的设置逻辑。原始代码的逻辑很简单,

就是在页面加载完成后,检查浏览器的Cookie中是否已经存在codinglab这个标识,如果不存在,

就显示Cookie弹窗;当用户点击接受或取消按钮时,隐藏弹窗,并且如果用户点击的是接受按钮,

就设置一个名为cookieBy的Cookie,有效期为1个月。

// 获取DOM元素
const cookieBox = document.querySelector(".wrapper"),
      buttons = document.querySelectorAll(".button");

// 执行主函数
const executeCodes = () => {
  // 如果cookie中包含codinglab,则返回,不执行下面的代码
  if (document.cookie.includes("codinglab")) return;
  // 显示cookie弹窗
  cookieBox.classList.add("show");

  // 为按钮添加点击事件
  buttons.forEach((button) => {
    button.addEventListener("click", () => {
      // 隐藏cookie弹窗
      cookieBox.classList.remove("show");

      // 如果点击的是"接受"按钮
      if (button.id == "acceptBtn") {
        // 设置cookie有效期为1个月
        // 计算方式:60秒=1分钟,60分钟=1小时,24小时=1天,30天=1个月
        document.cookie = "cookieBy= codinglab; max-age=" + 60 * 60 * 24 * 30;
      }
    });
  });
};

// 网页加载时执行函数
window.addEventListener("load", executeCodes);

不过,这里要说明一下,这个版本的JS代码实现的功能比较简单,只能控制弹窗的显示和隐藏,

以及记录用户是否接受Cookie。对于一些更复杂的场景,比如根据用户的选择禁用非必要的Cookie,

或者和后端进行交互,验证用户的同意状态等,它就力不从心了。如果你只是像我一样,做一个简单的个人博客,

这个版本的代码基本够用了;但如果你的网站功能比较复杂,涉及到大量的用户数据收集和处理,

建议还是结合后端逻辑,或者使用专业的 Cookie管理平台工具来实现更完善的Cookie控制功能。


以上js仅实现了基本功能,接受和拒绝,控制是否显示,无法直接控制是否允许使用cookie,

不过接受后,cookie会增加名为cookieBy的cookie,用cookieBy来判断其它位置的js是否加载是一个不错的方法

关键提醒

隐私政策

链接要真实可访问,不然不合规

移动端建议为wrapper加max-width: 90%;,避免超宽

代码没有控制其它cookie脚本的功能,需要自己开发,比如依据codinglab的cookie是否存在,决定是否运行指定cookie脚本

偷懒方案推荐

开源神器:CookieConsent

(推荐!)地址:https://github.com/orestbida/cookieconsent

为想节省开发时间的开发者,强烈推荐开源项目

CookieConsent。其核心优势突出:支持多语言切换,适配全球用户;可按功能/重要性配置层级Cookie(如必要、分析、广告类),

平衡用户隐私掌控与网站合规;自带隐私政策生成器,能自动生成合规模板,省去专业撰写的麻烦。

它尤其适合需精细化Cookie管理的中大型网站(如电商、资讯平台),助力站长专注核心业务,

无需忧心隐私合规问题。(现成的,可自定义样式,但控制其它脚本是否加载做了优化)

谨慎选择:CookieYes

(不推荐免费版)地址:https://www.cookieyes.com/

CookieYes是一款知名的Cookie合规

管理工具,以零代码体验为核心优势。其可视化编辑器支持拖拽调整弹窗颜色、按钮位置等样式,

搭配GDPR、CCPA等合规模板,让非技术用户也能快速生成符合法规的Cookie弹窗。 

免费版提供基础功能,但会显示品牌水印且仅限5000页面浏览量,高级功能如多域名支持、

合规报表等需付费解锁。 作为谷歌认证的合规合作伙伴,它能自动同步全球隐私法规更新,生成审计所需的同意日志,

适合跨境电商、企业网站等对合规性要求高的场景。个人站长若追求性价比可选择免费开源工具,

而预算充足且重视品牌形象与复杂合规需求的用户,付费版比定制开发更具成本优势。

(反正我不喜欢,广告太频繁了,密码我也忘了,所以不知道他们有没有关闭推送的开关,只能拦截邮件了)


Hackyh'Blog版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

网络技术
微信视频下载 微信视频号/公众号 视频下载工具 (多工具合集) 为网站浏览器页面添加侧边彩色滚动条

游客 回复需填写必要信息
召唤伊斯特瓦尔