【问题标题】:Javascript window.location is getting called again and again IE-8Javascript window.location 被一次又一次地调用 IE-8
【发布时间】:2022-01-26 22:23:02
【问题描述】:

我正在检查、获取和设置一个 cookie 来跟踪上次访问的页面。为此,我调用了 Javascript onload。问题是当我执行这个 js 时,它会一次又一次地刷新,就像鼠标移动一样,但除了onload,我没有任何事件。

这是我的 js:

 <script type='text/javascript'>
    //<![CDATA[
    
    window.onload = function(event){        
        var currentPage = window.location.href;
        var lastVisited = getCookie('udis');
        var sessionId= getCookie('udisSession');
        if(lastVisited === null || lastVisited === undefined){
            setCookie("udis", currentPage, 365);
            lastVisited = getCookie('udis');
        }
        if(sessionId === null || sessionId === undefined){
            setSessionCookie('udisSession');
            if(lastVisited !== currentPage){
                window.location.href = lastVisited;         
            }           
        }
        setCookie("udis", currentPage, 365);
        updateBreadCrumb();
    }
        
        function getCookie(c_name) {
            var i,x,y,ARRcookies=document.cookie.split(";");
            for (i=0;i<ARRcookies.length;i++){
                x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
                y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
                x=x.replace(/^\s+|\s+$/g,"");
                if (x==c_name) {
                    return unescape(y);
                }
            }
        }
        function setSessionCookie(c_name){
        document.cookie=c_name + "=" + 'testSession'+'; expires=; path=/';
    }
        
        function setCookie(c_name,value,exdays){
            var exdate=new Date();
            exdate.setDate(exdate.getDate() + exdays);
            var c_value=escape(value) + ((exdays==null) ? "" : ";   expires="+exdate.toUTCString());
            document.cookie=c_name + "=" + c_value;
        }
      

    //]]>
    </script>

上述代码在 Firefox 中完美运行,但在 IE-8 中却导致页面一次又一次地重新加载。

【问题讨论】:

    标签: javascript internet-explorer cookies dom-events


    【解决方案1】:

    设置 cookie 时,分号后需要一个空格。您还需要一个有效期。如果您想制作一个在浏览器关闭时过期的 cookie,请删除过期日期条款。

    function setSessionCookie(c_name){
        document.cookie=c_name + "=" + 'testSession'+'; path=/';
    }
    

    我建议你使用here中的函数:

    function createCookie(name,value,days) {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime()+(days*24*60*60*1000));
            var expires = "; expires="+date.toGMTString();
        }
        else var expires = "";
        document.cookie = name+"="+value+expires+"; path=/";
    }
    
    function readCookie(name) {
        var nameEQ = name + "=";
        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,c.length);
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
        }
        return null;
    }
    
    function eraseCookie(name) {
        createCookie(name,"",-1);
    }
    

    您可以使用createCookie(c_name, 'testSession');,而不是使用setSessionCookie(c_name)

    【讨论】:

    • @Rachel:你没有给它一个有效期,所以它马上就过期了。
    • 我实际上正在制作 2 个饼干。 “udis”和“udisSession”。第一个 cookie (udis) 有一个到期日期。但是第二个 cookie 是一个会话 cookie,这就是我没有设置任何到期日期的原因。
    • @Rachel:要让 cookie 在浏览器关闭时过期,请删除 expires= 子句。
    • @Rocket:它正在工作。除了在分号后添加空格并删除“expire =”子句之外;我没有做任何改变。我没有得到真正的原因。
    • @Rachel:这就是原因。您需要在分号后留一个空格才能正确设置 cookie。另外expire=; 告诉它立即过期,所以它从未设置过。
    猜你喜欢
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2015-10-22
    • 1970-01-01
    相关资源
    最近更新 更多