Javascript 当用户访问3个或更多页面时触发功能

Javascript 当用户访问3个或更多页面时触发功能,javascript,jquery,cookies,counter,Javascript,Jquery,Cookies,Counter,我试图找出如何跟踪用户通过cookies访问多少页面。我只想数一数他们访问了多少页,然后在第三页上显示一份时事通讯注册表。这是我当前的脚本,没有任何计数机制: function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays*24*60*60*1000)); var expires = "expires="+d.toUTCString();

我试图找出如何跟踪用户通过cookies访问多少页面。我只想数一数他们访问了多少页,然后在第三页上显示一份时事通讯注册表。这是我当前的脚本,没有任何计数机制:

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) == 0) return c.substring(name.length,c.length);
    }
    return "";
}
var hidePopoverCookie = getCookie("hidePopover");
if (hidePopoverCookie == "") { // && pagesVisited > 2
    setTimeout(function() {
        $("#popOver").show();
    }, 5000);
}
$("#popOver button").click(function() {
    $("#popOver").hide();
    setCookie("hidePopover", true, 365);
})

不管发生什么,它都会返回“未访问页面”,我不知道为什么。我对Cookie非常陌生,我确信有一种更干净的方法可以做到这一点,我只想把它完成(这个项目让我发疯)。

既然我看到你已经在使用jQuery,我将使用它作为包装函数,它将在
DOM加载事件上触发比实际逻辑更高的逻辑,那么我可以这样使用你:

$(function(){//在页面的DOM就绪后激发
var visitscont=JSON.parse(sessionStorage.getItem('visitscont');
if(visitcount.legnth<3&$.inArray(window.location.href,visitcount)=-1){
visitcount.push(window.location.href);
setItem('visitCount',JSON.stringify(visitCount));
}
if(visitCount.legnth>=3)//用户已查看了3个不同的页面
//做任何事
});

代码正在将页面的当前URL存储在
会话存储
,如果该URL不在存储的数组中。

您正在设置一个名为
页面列表
的cookie,当您阅读名为
pagesVisited

的cookie时,所有酷炫的开发者都使用sessionStorage:增加sessionStorage显然是最好的方法。您的
getCookie
函数工作不正常,而且。如果你想坚持使用cookie(以防你需要在服务器上或类似的地方阅读),而不是像建议的那样切换到会话存储,我建议你看看并重新实现set/getCookie函数。
var pagesVisitedCookie = getCookie("pagesVisited");
if (pagesVisitedCookie === "") {
    console.log ("no pages visited");
    setCookie("pagesVisted", 1, 365);
} else if (pagesVisitedCookie === 1) {
    console.log("2 pages visited");
    setCookie("pagesVisted", 2, 365);
} else if (pagesVisitedCookie > 2) {
    console.log("More than 2 pages visited");
    setCookie("pagesVisted", 3, 365);
}
$(function(){ // fires once a page's DOM is ready
   var visitsCount = JSON.parse(sessionStorage.getItem('visitsCount'));

   if( visitsCount.legnth < 3 && $.inArray( window.location.href, visitsCount ) == -1 ){
       visitsCount.push(window.location.href);
       sessionStorage.setItem('visitsCount', JSON.stringify(visitsCount));
   }

   if( visitsCount.legnth >= 3 ) // user has viewed 3 different pages
      // do whatever
});