Internet Explorer中的cookie没有被正确设置使用JavaScript(Inter

2019-08-01 14:18发布

我想保存/上回发恢复滚动位置。 我的代码工作的Firefox和除Internet Explorer的所有主流浏览器。

    function saveScrollPosition() {

    // Save the cookie if the requestor is Internet Explorer
    if (navigator.appName.indexOf("Microsoft") != -1) {
       alert("Internet Explorer browser has been identified...");
       var scrollX, scrollY;
       var strA = "KulScrollPos=";
       var strB = ",";
       var strC = "; path=";

       // Depending on the version of Internet Explorer --- call the appropriate API
       if (!document.documentElement.scrollLeft)
         scrollX = document.body.scrollLeft;
       else
         scrollX = document.documentElement.scrollLeft;
       if (!document.documentElement.scrollTop)
         scrollY = document.body.scrollTop;
       else
         scrollY = document.documentElement.scrollTop;
       alert("scrollX = " + scrollX + " and " + "scrollY = " + scrollY);
       alert("strA = " + strA);

       //document.cookie = "KulScrollPos="+scrollX+","+scrollY+"; path="+document.location.pathname;
       document.cookie = strA.concat(scrollX, strB, scrollY, strC, document.location.pathname);
    }
    // Save the cookie for all other major browsers
    else {
       document.cookie = "KulScrollPos="+f_scrollLeft()+","+f_scrollTop()+"; path="+document.location.pathname;
    }
    alert("cookie = " + document.cookie)
}

function restoreScrollPosition() {
    alert("Entered the restore method...");
    cookieName = "KulScrollPos";

    if (document.title == "KFS :: Create Purchase Log") {
       resetScrollPosition();
       expireCookie( cookieName );
       return true;
    }
    else {
       var matchResult = document.cookie.match(new RegExp(cookieName+"=([^;]+);?"));
       if ( matchResult ) {
         var coords = matchResult[1].split( ',' );
         if (coords[1] != 0) {
           alert("Restoring the scroll position before scrollTo... " + coords[0] + " and " + coords[1]);
           window.scrollTo(coords[0],coords[1]);
           parent.window.scrollTo(coords[0],coords[1]);

        }
        expireCookie( cookieName );
        return true;
    }
    else {
     return false;
    }
}

请注意我的警告框在那里我打印cookie的名称。

火狐输出如下:

cookie = KulScrollPos=0,1946; kualiSessionId=A7807919-4719-D5B4-91D6-9CC04EEA1BA8;JSESSIONID=1F155C7FC23C48A4DAF557CA4B92D2CB

Internet Explorer中打印以下内容:

cookie = kualiSessionId=072BE31C-6AF5-6D4C-11A4-55E799790C6A; JSESSIONID=76D83E8E7EBA5F25B8A1B1990B9344E8

请注意,该串KulScrollPos = 0,1946; 正在离开cookie的名称。 这只是发生在Internet Explorer!

***我试图另一种方法在设定我在哪里设定的document.cookie = ...这条线也产生相同的警报输出作为上面显示的字符串变量(即注释掉线)。

请注意我的else块在我RestoreScrollPosition。 该IF(MatchResult的)条件总是失败,因为这一点,因为它的,我的代码有,我打电话给我的scrollTo方法不会被调用!

Ughhh,我在串联串错了吗? 什么是不是IE那样的FF呢?

很奇怪的行为的确!

Answer 1:

显然,Internet Explorer不喜欢双引号中提供了cookie名称的“=”(等号)。 它被解释“=”; 而不是接受它作为文字; 因此,我用单引号解决了这个问题。 很显然,你必须要有力与IE浏览器! 去搞清楚....

下面的代码固定的,我是有这个问题 -

function saveScrollPosition() {

    // Save the cookie if the requesting browser is Internet Explorer
    if (navigator.appName.indexOf("Microsoft") != -1) {
        // Ensure that the cookie will be saved on IE version 5/+
        if (!document.documentElement.scrollLeft)
          scrollX = document.body.scrollLeft;
        else
          scrollX = document.documentElement.scrollLeft;
        if (!document.documentElement.scrollTop)
          scrollY = document.body.scrollTop;
        else
          scrollY = document.documentElement.scrollTop;
        document.cookie = 'KulScrollPos =' + scrollX+','+scrollY+';'+document.location.pathname;
    }

    // Save the cookie for all other major browsers
    else {
        document.cookie = "KulScrollPos="+f_scrollLeft()+","+f_scrollTop()+"; path="+document.location.pathname;
    }
}

得到教训 -

不要使用“=”标志在你的cookie名称。 如果需要的话,使用单引号告诉IE无法解释它,而是接受它作为文字。



Answer 2:

Cookie数据是不应该能包含逗号。 你需要编码或写入之前逃脱你的滚动数据,然后解码或取消转义它读。

编辑:你也可以只改变你的分隔符; 也许尝试管道(|)?



Answer 3:

逗号是多个cookie有效的分隔。 尝试更换逗号%2C ,或escape()整个cookie值。



文章来源: Internet Explorer cookie not being set properly using JavaScript