Javascript window.location 被一次又一次调用 IE-8

标签 javascript internet-explorer cookies dom-events

我正在检查、获取并设置 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 中却导致页面一次又一次重新加载。

最佳答案

设置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)

关于Javascript window.location 被一次又一次调用 IE-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7111951/

相关文章:

javascript - JQuery 选择器性能和比较问题

javascript - 如何抑制 Visual Studio 嵌入式浏览器中的脚本错误

javascript - 在 jCookie 中保存可拖动 div 的位置/位置

Java CookieManager 或 CookieHandler 过期了吗?

cookies - 如何从 nginx 响应中删除某些 cookie

javascript - 仅在实际使用 cookie 时显示 cookie 通知

javascript - 使用自定义端点扩展现有 API

javascript - 是否可以为存储库中的多个项目使用一个 node_module 文件夹?

html - Bootstrap glyphicons 公文包未在 IE 浏览器中显示

javascript - Internet Explorer 6、7 和 8 中的 Object.onload