新闻详情

新闻详情

首页 / 资讯中心 / 详情

为什么smartbanner.js横幅关闭后不再出现?hide-ttl与hide-path的Cookie机制深度解析

发布时间:2026/9/18 10:58:57来源:尧图网络
为什么smartbanner.js横幅关闭后不再出现?hide-ttl与hide-path的Cookie机制深度解析
为什么smartbanner.js横幅关闭后不再出现hide-ttl与hide-path的Cookie机制深度解析【免费下载链接】smartbanner.jsCustomisable and lightweight smart app banner for iOS and Android项目地址: https://gitcode.com/gh_mirrors/smar/smartbanner.jssmartbanner.js 是一款面向 iOS 和 Android 的轻量级智能应用横幅Smart App Banner库只需几行 meta 标签即可在网页顶部渲染出引导用户下载 App 的横幅。很多新手都会遇到同一个困惑为什么点了一次关闭横幅就再也不出现了答案藏在hide-ttl与hide-path两个选项背后的 Cookie 机制里。本文带你从源码角度完整拆解它的记忆原理并给出一张即查即用的配置速查表。先搞懂横幅关闭时到底发生了什么当用户点击横幅上的×按钮时触发的是 src/smartbanner.js 中的handleExitClick它调用exit()方法完成三件事移除事件监听、恢复页面原有位置从 DOM 中删除横幅节点并派发smartbanner.exit事件关键一步——调用Bakery.bake(this.hideTtl, this.hidePath)写入一个 Cookie。而下次页面加载时publish() 会在渲染横幅前先检查如果Bakery.baked为true即 Cookie 中已标记用户已关闭直接返回横幅不再出现这正是关闭后不再出现的根本原因浏览器里留着一条smartbanner_exited1的 Cookie。两个选项的取值逻辑非常简单都定义在 src/smartbanner.js 的 getter 中hideTtl设置了就转成整数毫秒数没设置则为falsehidePath设置了就用你给的值没设置时默认是/整站生效。这两个值分别对应 Cookie 的expires有效期和path生效范围下面逐一拆解。hide-path用 Cookie 的 path 决定关闭管多宽写入 Cookie 的核心代码在 src/bakery.js默认情况下不配置hide-pathCookie 以path/写入对整站所有页面生效用户在任何一个页面关闭横幅其他页面也不会再出现如果你只想让关闭行为局限在某个目录下可以配置更窄的路径例如meta namesmartbanner:hide-path content/shop这样 Cookie 只会在/shop及其子路径下被读取用户访问/blog等其他路径时横幅会重新出现。 记忆口诀path 决定横幅被忘记的空间范围——/是全站/xxx是局部。官方文档中对这一行为的描述可参考 README.md 的 Path-designated close 小节。hide-ttl用 Cookie 的 expires 决定关闭管多久hide-ttl的单位是毫秒对应官方文档 README.md 中的 Time-limited close 小节。它的处理链路是src/smartbanner.js 的hideTtlgetter 把 meta 标签的值解析成整数src/bakery.js 的getCookieExpiresString用当前时间 hideTtl计算出过期时间生成expires...字符串如果没有设置hide-ttlbake()就不写 expires 属性——此时是一条会话 Cookie只持续到浏览器或标签页关闭为止。典型配置示例!-- 关闭后 10 秒内横幅不再出现10 秒后重新显示 -- meta namesmartbanner:hide-ttl content10000几个常用数值帮你建立量级感hide-ttl 值含义1000010 秒后重新出现864000001 天后重新出现31536000000约 1 年后重新出现单元测试 test/spec/bakery_spec.js 中还演示了如何用一个约 30 天的毫秒值生成过期时间可作为长期关闭的参考。Bakery一个包办Cookie 读写的小类Bakery 是整个机制的心脏只有 4 个静态方法却承担了全部 Cookie 工作bake(hideTtl, hidePath)写入smartbanner_exited1并附带可选的 expires 与 pathbaked用正则从document.cookie中读出该值等于1即返回true是横幅认账的唯一依据unbake()把过期时间设到 1970 年 1 月 1 日从而删除这条 Cookie对应 src/bakery.jsgetCookieExpiresString(hideTtl)生成 GMT 格式的过期时间字符串。这种烘焙 / 解冻 / 反烘焙的拟人化命名也暗示了设计意图横幅像面包一样被烤熟记住用户关闭过期后自然失效。四种组合速查表想达到什么效果就怎么配期望效果hide-ttlhide-path结果本次会话内不再出现最常用不配置不配置默认/整站关闭横幅关闭浏览器后恢复隔段时间重新出现拉新再触达如86400000不配置24 小时后横幅重新出现只在当前栏目关闭不配置如/shop访问其他路径时横幅照常出现长期关闭、接近永久31536000000不配置一年内整站不再出现⚠️ 常见踩坑hide-ttl填10并不是10 秒而是10 毫秒几乎等于立即重新出现单位务必用毫秒。调试技巧3 步定位横幅去哪了查看 Cookie打开浏览器开发者工具 → Application → Cookies找到smartbanner_exited检查它的Value、Path和Expires三栏即可直接对应本文讲的两个选项手动解冻在开发者工具中删除该 Cookie 后刷新页面横幅立刻回归监听事件项目派发了smartbanner.init、smartbanner.view、smartbanner.clickout、smartbanner.exit四类事件见 README.md 的 Events 小节可以在smartbanner.exit中打点确认 Cookie 是在用户点击关闭的瞬间写入的。如果你开启了 API 模式smartbanner:api设为yes还可以在代码里直接调用publish()手动展示横幅方便做 A/B 测试。总结一句话记住整个机制关闭横幅 写一条smartbanner_exited1的 Cookie之后每次publish()都会先验票hide-path管空间Cookie 的 path 决定关闭行为覆盖整站还是某个目录hide-ttl管时间毫秒级的 Cookie 过期时间不设置则只存活到会话结束核心实现全部集中在 src/bakery.js 与 src/smartbanner.js 中配合 test/spec/bakery_spec.js 的测试用例几分钟就能读透。理解了这套机制你既可以放心让横幅闭嘴也能按运营节奏让它准点回归。【免费下载链接】smartbanner.jsCustomisable and lightweight smart app banner for iOS and Android项目地址: https://gitcode.com/gh_mirrors/smar/smartbanner.js创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

TeXLive2020安装配置避坑指南:镜像源、PATH与中文排版 2026/9/18 10:58:42

TeXLive2020安装配置避坑指南:镜像源、PATH与中文排版

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
SIMULINK-PID主动悬架动态仿真与工程验证方法 2026/9/18 10:58:42

SIMULINK-PID主动悬架动态仿真与工程验证方法

简介:本资源是一份面向车辆工程、控制理论与仿真建模方向本科生及研究生的MATLAB/Simulink实践教学材料,聚焦主动悬架系统的核心控制策略设计与动态性能验证。资源以PID控制理论为基础,完整呈现了1/4车辆二自由度动力学建模、路面激励输入构建…

阅读更多 →
MATLAB手写基-2 FFT:蝶形运算、位反转与精度对比 2026/9/18 10:58:42

MATLAB手写基-2 FFT:蝶形运算、位反转与精度对比

简介:《老生谈算法》系列的MATLAB实现FFT算法程序文档,面向数字信号处理初学者、通信类课程学生及需用频谱分析的MATLAB开发者,系统讲解快速傅里叶变换的数学原理与工程实现。文档先阐明FFT结果中每个频率点的物理含义,包括复数的…

阅读更多 →
Rust与C内存管理本质对比:所有权系统如何重塑系统编程 2026/9/18 10:58:42

Rust与C内存管理本质对比:所有权系统如何重塑系统编程

1. 这个问题背后,藏着程序员十年来最痛的伤口Rust 是不是就相当于新时代的 C 语言?——这句话在 Rust 社区里被反复提起,也常被 C 老兵嗤之以鼻。但真正值得深挖的,不是“是不是”,而是为什么会有这么多人下意识地用 C…

阅读更多 →
C#多线程编程实战:从基础到高级应用 2026/9/18 10:58:42

C#多线程编程实战:从基础到高级应用

1. 多线程编程基础概念解析在C#开发中,多线程编程是提升程序性能的重要手段。让我们先理解几个核心特性:异步执行的本质是将耗时操作从主线程剥离,避免界面卡顿。想象你在餐厅点餐:同步方式是服务员站在厨房等厨师做完菜才服务下一…

阅读更多 →
AI-900备考:用Word样式与VBA宏打造可检索的docx工具书 2026/9/18 10:55:42

AI-900备考:用Word样式与VBA宏打造可检索的docx工具书

简介:这是一份面向微软 AI-900 认证考生的快速入门工具书,适合零基础或初级学习者系统了解人工智能核心概念与云计算平台 Azure 的 AI 服务能力。全书以 docx 文档呈现,从人工智能定义、发展历史、应用场景和技术分类讲起,再逐模块…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞