SessionStorage 仅提供会话级存储,需手动记录通知次数并判断:读取计数、≤上限则递增并触发通知、字符串转数值处理;其生命周期限单标签页,刷新不重置但关闭后清空;防重复还需结合禁用按钮、节流或时间戳校验。

SessionStorage 本身不直接控制通知触发逻辑,它只是提供一个会话级的键值存储空间。限制单次会话中用户触发通知的次数,需要你手动用它来记录已触发次数,并在每次触发前做判断。
用 SessionStorage 记录通知触发次数
每次想显示通知前,先读取 sessionStorage 中的计数器,如果未超过设定上限,就增加计数并执行通知;否则跳过。
- 初始化时检查 key 是否存在,不存在则设为 0
- 每次触发前递增并存回 sessionStorage
- 注意:数值以字符串形式存储,需用 parseInt() 转换
示例代码:最多允许 3 次通知
注意:这里假设你用的是浏览器原生 Notification API
function showLimitedNotification() {
const key = 'notificationCount';
let count = parseInt(sessionStorage.getItem(key) || '0', 10);
if (count >= 3) return;
// 请求权限(仅首次需要)
if (Notification.permission === 'default') {
Notification.requestPermission();
}
if (Notification.permission === 'granted') {
new Notification('提示消息');
sessionStorage.setItem(key, String(count + 1));
}
}
重置计数器的时机要明确
sessionStorage 在页面关闭(包括标签页)后自动清空,所以“单次会话”天然对应一个标签页生命周期。但如果你希望用户刷新页面后仍延续计数,就不能依赖 sessionStorage —— 那就得换 localStorage 或服务端状态。
立即学习“Java免费学习笔记(深入)”;
- 刷新页面不会清空 sessionStorage,计数继续累加
- 关闭整个标签页后,下次打开新标签页,计数从 0 开始
- 如需跨标签页同步,需配合 BroadcastChannel 或服务端
避免重复触发的补充建议
光靠计数还不够,实际场景中还要防抖或节流,比如用户快速点击多次按钮:
- 给触发按钮加 disabled 状态,通知显示后再恢复
- 用 setTimeout 或 Promise 防止短时间内多次调用
- 结合时间戳判断是否距离上次触发太近(例如 5 秒内只算 1 次)


















