代码之家  ›  专栏  ›  技术社区  ›  Maxim Brkn

每个会话运行一次超时脚本(但您可以重新加载页面并转到其他页面)

  •  0
  • Maxim Brkn  · 技术社区  · 6 年前

    我有一个简单的脚本,每个用户会话只需运行一次。但在这个会话中,他可以刷新页面,或者转到一个站点上的另一个页面。

    我的代码现在如下所示,但如果用户刷新页面(在10秒内)或转到其他页面,脚本将永远不会运行:(

    var visited = sessionStorage.getItem('visit');
    if (visited == null || document.location.href == sessionStorage.getItem('lastPage')) {
        setTimeout(function() { 
        alert('Hello World')
            }, 10000
      )
        sessionStorage.setItem('visit', 1);
      };
    

    工作示例: https://codepen.io/zavtraleto/pen/GdRpRZ

    我想可能是饼干的问题

    1 回复  |  直到 6 年前
        1
  •  0
  •   Maxim Brkn    6 年前

    我是用cookie制作的,所以如果每个人都感兴趣:

    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 "";
        }
    
        function checkCookie() {
            var user = getCookie("username");
            if (user != "") {
                alert("Welcome again " + user);
            } else {
                user = prompt("Please enter your name:", "");
                if (user != "" && user != null) {
                    setCookie("username", user, 365);
                }
            }
        }
    
        getCookie('user_first_visited') || setCookie('user_first_visited', Date.now());
    
        if (!getCookie('user_popup_triggerred')) {
            var loopDetect = setInterval(function(){
                var TimePast = (Date.now() - getCookie('user_first_visited')) / 1000;
                if( TimePast > 5){
                    if (localStorage.getItem('surveyOnce') !== 'true') {
                (function() { 
                    alert('Hello World!')
                    }
                  )();
                  localStorage.setItem('surveyOnce','true');
                  };
                }
            }, 1000);
        }