You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置localStorage24小时过期实现网站访问弹窗定时重现

localStorage 弹窗24小时过期展示实现方案

原有代码问题

你之前写的逻辑存在两个致命问题,完全无法实现预期的间隔判断:

  • 仅在localStorage中存储了"true"/"false"的布尔标记,没有记录弹窗上次展示的具体时间,根本无法计算两次访问的时间间隔
  • 调用getHours()获取当日小时数做范围判断完全无效,该方法只会返回当前时间在当天0-23区间的小时值,跨天、跨月、跨年的时间差完全无法通过这个值计算

正确实现逻辑

localStorage本身没有原生过期配置,要实现24小时有效期,只需要在弹窗展示时把当前时间戳存入localStorage,每次用户访问站点时取出存储的时间戳,和当前时间做差值计算,差值超过24小时对应的毫秒数就重新触发弹窗,同时更新存储的时间戳即可。

修正后可直接运行的代码

// 24小时对应的毫秒值
const DIALOGUE_EXPIRE_MS = 24 * 60 * 60 * 1000;
// 读取上次弹窗展示的时间戳
const lastShowTime = window.localStorage.getItem("dialogue_last_show");
const currentTime = Date.now();

// 满足两个条件之一就弹出弹窗:从未展示过弹窗 / 距上次展示已超过24小时
if (!lastShowTime || (currentTime - Number(lastShowTime)) >= DIALOGUE_EXPIRE_MS) {
    // 初始化弹窗内容
    const dialogue = new Dialogue();
    dialogue.setHtmlMessage(string('dialogue-heading'));
    dialogue.addHtmlDetail(string('dialogue-detail'));
    // 弹窗触发后更新存储的时间戳,重新开始24小时计时
    localStorage.setItem("dialogue_last_show", String(currentTime));
}

可选调整说明

  • 如果你需要等用户主动关闭弹窗后才开始计算24小时间隔,只需要把localStorage.setItem那行代码移到弹窗关闭的回调事件里即可
  • 时间戳存储时统一转成字符串,读取计算时转回数字类型,避免隐式类型转换导致的判断异常
  • 如果需要支持用户手动永久关闭弹窗,可以额外加一个永久关闭的标记位判断,和时间戳判断做与逻辑即可

内容的提问来源于stack exchange,提问作者paul35

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:09:29