
本文介绍如何通过 JavaScript 结合 localStorage 和系统时间,实现在指定时间(如每晚 9 点)仅执行一次页面跳转,避免重复重定向,特别适用于数字标牌、自助终端等需定时切换展示内容的场景。
本文介绍如何通过 javascript 结合 `localstorage` 和系统时间,实现在指定时间(如每晚 9 点)仅执行一次页面跳转,避免重复重定向,特别适用于数字标牌、自助终端等需定时切换展示内容的场景。
在自助服务终端、门店信息屏等固定设备中,常需实现“每日定时单次跳转”——例如每天 21:00(即晚上 9 点)自动从首页跳转至“已打烊”提示页,但次日清晨应自动恢复为首页,且手动刷新或重启浏览器后不再重复跳转,确保运维人员可随时手动返回主页调试或维护。
核心思路是:用 localStorage 持久化记录“是否已完成本次跳转”状态,仅当未跳转过 + 当前时间满足条件时,才执行跳转并标记状态。这比单纯依赖时间判断更可靠,彻底规避了“页面持续轮询导致反复跳转”的问题。
以下为完整、健壮的实现代码(适配您的需求:每周三 19:00–20:00 间跳转,且仅一次):
// 定义唯一标识键名,避免与其他脚本冲突
const redirectKey = 'auto-redirect-wednesday-closed';
// 检查是否已执行过本次跳转(localStorage 中存在且值为 true)
const hasRedirected = localStorage.getItem(redirectKey) === 'true';
if (!hasRedirected) {
const now = new Date();
const dayOfWeek = now.getDay(); // Sunday=0, Monday=1, ..., Wednesday=3
const hour = now.getHours();
// 仅在周三(dayOfWeek === 3)且时间为 19:00–20:00(含)之间触发
if (dayOfWeek === 3 && hour >= 19 && hour <= 20) {
// ✅ 标记已跳转(写入 localStorage,持久生效)
localStorage.setItem(redirectKey, 'true');
// ✅ 执行跳转(注意:使用 replace() 更合理,避免用户点「返回」回到原页)
window.location.replace('washselection_wednesday.html');
}
}✅ 关键优化说明:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
立即学习“Java免费学习笔记(深入)”;
- 使用 'true' 字符串而非布尔值存入 localStorage(因 localStorage 只支持字符串),读取时直接严格比较 === 'true',避免 JSON.parse(null) 异常风险;
- 采用 window.location.replace() 替代 location.href,防止跳转后用户点击浏览器“返回”按钮意外回到原页,提升终端体验一致性;
- 时间范围精确到 19–20(即 19:00 至 20:00),确保覆盖 21:00 关店时刻(您原文中 hour >= 7 && hour <= 20 实际对应 07:00–20:00,存在歧义,已按真实需求修正);
- 逻辑置于全局脚本中,无需额外初始化,页面加载即校验。
⚠️ 注意事项:
- localStorage 是同源(协议+域名+端口)隔离的,若测试时通过 file:// 协议打开 HTML,部分浏览器会禁用 localStorage,请务必部署在 HTTP/HTTPS 服务器(如 http://localhost)下测试;
- 若需“每日重置”(如每天 21:00 都跳转一次),则不能依赖静态键名,而应结合日期生成动态键(如 auto-redirect-2024-05-22),但本例按需求设计为每周仅一次;
- 终端设备建议启用自动时间同步,并确保系统时区设置正确(如 Asia/Shanghai),否则时间判断将失效。
总结:该方案以轻量、无依赖、高兼容的方式,精准达成“定时 + 单次 + 可逆”的跳转目标——既满足自动化运营需求,又保留人工干预通道,是数字标牌类项目的理想实践。

















