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

寻求Cookie/LocalStorage方案:实现window.onload每月仅触发一次模态框

方案一:使用 LocalStorage

LocalStorage 会持久保存数据(除非用户手动清除),我们通过存储上次弹窗的时间戳,判断当前时间与上次的间隔是否超过30天(近似一个月)来控制弹窗触发:

<script type="text/javascript">
window.onload = function () {
    // 检查是否需要触发弹窗
    const shouldShowModal = checkIfNeedShowModal();
    if (shouldShowModal) {
        OpenBootstrapPopup();
        // 记录本次弹窗的时间戳
        localStorage.setItem('lastModalShown', Date.now().toString());
    }
};

function checkIfNeedShowModal() {
    const lastShown = localStorage.getItem('lastModalShown');
    if (!lastShown) {
        // 从未弹出过,允许触发
        return true;
    }
    // 计算30天的毫秒数(30*24*60*60*1000)
    const thirtyDaysInMs = 2592000000;
    const currentTime = Date.now();
    // 判断是否超过30天
    return currentTime - parseInt(lastShown) > thirtyDaysInMs;
}

function OpenBootstrapPopup() {
    $("#simpleModal").modal('show');
}

function myFunctionClose() {
    $("#simpleModal").modal('hide');
}        
</script>

Cookie 可以直接设置过期时间,我们将Cookie的过期时间设为30天后,页面加载时检查Cookie是否存在:

<script type="text/javascript">
window.onload = function () {
    // 检查名为 modalShown 的Cookie是否存在
    if (!getCookie('modalShown')) {
        OpenBootstrapPopup();
        // 设置Cookie,30天后过期
        setCookie('modalShown', 'true', 30);
    }
};

// 获取Cookie的工具函数
function getCookie(name) {
    const value = `; ${document.cookie}`;
    const parts = value.split(`; ${name}=`);
    if (parts.length === 2) return parts.pop().split(';').shift();
}

// 设置Cookie的工具函数
function setCookie(name, value, days) {
    let expires = "";
    if (days) {
        const date = new Date();
        date.setTime(date.getTime() + (days*24*60*60*1000));
        expires = "; expires=" + date.toUTCString();
    }
    document.cookie = `${name}=${value || ""}${expires}; path=/`;
}

function OpenBootstrapPopup() {
    $("#simpleModal").modal('show');
}

function myFunctionClose() {
    $("#simpleModal").modal('hide');
}        
</script>

说明

  • 两种方案的区别:LocalStorage的数据保存在浏览器端,不会随请求发送到服务器;Cookie会在每次请求时携带到服务器(如果设置了对应的路径和域名)。
  • 30天是近似一个月的取值,你可以根据需求调整天数(如果需要按自然月精确计算,需额外处理日期逻辑,日常场景30天足够)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:46:04