每周运行一次javascript函数

时间:2016-03-17 09:42:57

标签: javascript cookies

我有以下javascript函数,目前每次访问都会运行。我不想在每次访问时使用此弹出窗口向我们的访问者发送垃圾邮件,因此我试图了解每周一次的Cookie并运行此操作。

setTimeout(function() {
    jQuery(document).one('mouseleave', function() {
        console.log('mouse left');
        jQuery('.open-popup-link').magnificPopup('open');
    });
}, 10000);

我把它放在我在这里找到的c​​ookie函数中,但是在控制台中没有运行且没有错误。

function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = "expires="+d.toUTCString();
    document.cookie = cname + "=" + cvalue + "; " + expires;
}
function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i<ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1);
        if (c.indexOf(name) != -1) return c.substring(name.length,c.length);
    }
    return "";
}   
function checkCookie() {
    var pinball = getCookie("pinball");
    if (pinball === "") { // Cookie not set
        setTimeout(function() {
            jQuery(document).one('mouseleave', function() {
                console.log('mouse left');
                jQuery('.open-popup-link').magnificPopup('open');
            });
        }, 10000);
        setCookie("pinball", "seen", 7);
    }
}

我错过或需要做些什么来实现这个目标?

2 个答案:

答案 0 :(得分:0)

我同意@MysterX关于本地存储的问题,但回答你的问题 - 从阅读你的代码 - 似乎没有调用触发checkCookie(),这意味着没有错误因为函数没有运行。

你可能应该:

$(document).ready(function(){
checkCookie()
})

你在代码的第一部分和checkCookie函数中也有一个拼写错误 - 同样的错误 - 你有:

 jQuery(document).one('mouseleave', function() {...

应该是。

 jQuery(document).on('mouseleave', function() {...

答案 1 :(得分:0)

使用 localStorage ,每次加载时只调用checkSeen一次,或者在setInterval中为从不关闭的浏览器执行。

function popup() {
  ...
}

function updateSeen() {
  var sec = Math.round(Date.now()/1000);
  localStorage.setItem("seen", sec);
  return sec;
}

function checkSeen() {
  var seen = localStorage.getItem("seen") || updateSeen();
  var now = Math.round(Date.now()/1000);
  var week = 604800;
  if ((now - seen) >= week) {
    updateSeen();
    popup();
  }
}

checkSeen();