【问题标题】:Run script with timeout once per session (but you could reload page and go to another page)每个会话运行一次超时脚本(但您可以重新加载页面并转到另一个页面)
【发布时间】:2018-04-18 18:31:57
【问题描述】:

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

我的代码现在看起来像这样,但是如果用户刷新页面(不到 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

我认为这可能与 cookie 有关

【问题讨论】:

  • 为什么要超时 10 秒?
  • @Vineesh 这将是一个弹出式表单,其中包含一个关于界面的小调查,因此用户必须在网站上花费时间(超时可能会变长)
  • 您想在一个页面中只显示一次弹出窗口吗?还是整个网站导航一次?
  • @Vineesh 在整个网站导航中使用一次

标签: javascript session cookies


【解决方案1】:

我是用 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);
    }

【讨论】:

    猜你喜欢
    • 2011-05-10
    • 1970-01-01
    • 2016-11-17
    • 2021-12-02
    • 2018-01-23
    • 2019-07-18
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    相关资源
    最近更新 更多