Javascript在Firefox中正常工作,但在Chrome中提供了NaN

时间:2012-02-12 15:12:16

标签: javascript firefox google-chrome nan

我正在努力帮助我的一位朋友,他必须对弹出窗口的人进行测试(她研究通信科学)。所以基本上我们有2个网站,每个网站都有不同的弹出窗口她问我是否可以制作每分钟显示弹出窗口的东西。但是会议记录必须在多个页面上工作(例如,它从索引开始,但是当我浏览网站并且分钟结束时,无论网站的哪个页面打开,都必须显示。)

我的javascript有点生疏,因为自从我接触此事以来已经3年了。所以对于这个问题,我使用了一些旧的javascript任务,我想我会用cookie解决问题。我在使用一个全局变量来解决一些问题。我希望该网站能够在firefox / chrome / IE上运行,因为她必须在大学计算机上进行测试,并且我知道他们在那里使用的浏览器。

所以基本上console.log(“timeRemaining”)将在firefox中显示正确的倒计时数(使用firebug),但在chrome logger中(使用inspect元素)它将显示NaN。因此不会显示div(由于弹出窗口拦截器,我没有使用新的窗口)。

哪里可能是问题?我已经确保使用parseInt解析从cookie返回的值。我甚至不明白为什么这个简单的代码会在Chrome中返回与Firefox不同的结果。

function setCookie(name, value) {
    var str = name + "=" +escape(value);
    str += "; expires= Tue, 28 Dec 2013 00:00:00";
    document.cookie = str;
}

function getCookie(name) {
    var allCookies = document.cookie.split("; "); // spatie!
    for(i in allCookies) {
        var singleCookie = allCookies[i].split("=");
        if(singleCookie[0] == name) {
            return unescape(singleCookie[1]);
        }
    }
    return undefined;
}

function showLayer(layerId){
    console.log("showlayer");
}

function checkTime() {
    timeRemaining = timeRemaining - 1;
    console.log(timeRemaining);
    if(timeRemaining == 0) {
        showLayer("popup");
        timeRemaining = stdTijd;
    }
    setCookie("tijd", timeRemaining);
}

function loaders() {
    timeRemaining = parseInt(getCookie("tijd"));
    if(timeRemaining == undefined) {
        console.log("new cookie created");
        setCookie("tijd", stdTijd);
        timeRemaining = parseInt(getCookie("tijd"));
    }
    console.log("cookie set, timeremaining=" + timeRemaining);
    setInterval(checkTime, 1000);
}

var timeRemaining;
var stdTijd = 10;
if (document.getElementById) window.onload = loaders;

NaN正在给出console.log(timeRemaining);在函数checkTime中。

Firefox打印:

  loaded, display = none
  cookie set, timeremaining=10
  9
  8
  7
  ..

Chrome打印:

  loaded, display = none
  cookie set, timeremaining=NaN
  NaN
  NaN
  ..

提前致谢。

编辑:删除我的cookie后,我也在Firefox中获得了NaN。所以问题不仅仅是firefox和chrome之间的区别,而是我代码中的一个基本错误。

EDIT2:

2 个答案:

答案 0 :(得分:1)

将Cookie取回时存在问题,这是一个有效的小提琴:jsFiddle

在你正在做的装载机中:

timeRemaining = parseInt(getCookie("timeRemaining"));

应该是:

timeRemaining = parseInt(getCookie("tijd"));

同样检查来自cookie的数据需要检查是否NaN,因为get cookie将发回undefined而parseInt将返回NaN:

if(timeRemaining==NaN)

答案 1 :(得分:0)

timeRemaining最初为undefined,这就是您传递给setCookie的内容。我想如果您编辑以下内容,它可能会有用。

setCookie("tijd", timeRemaining);

要:

setCookie("tijd", timeRemaining || stdTijd);