【问题标题】:Javascript works correct in Firefox but gives NaN in ChromeJavascript 在 Firefox 中工作正常,但在 Chrome 中给出 NaN
【发布时间】:2012-03-04 05:24:18
【问题描述】:

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

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

所以基本上 console.log("timeRemaining") 将在 firefox(使用 firebug)中显示正确的数字倒计时,但在 chrome 记录器(使用检查元素)中,它将显示 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 之间的区别,而是我的代码中的一个基本错误。

编辑2:

【问题讨论】:

  • 那么您是否检查过“timeRemaining”cookie 中的内容,即传递给parseInt() 的值的来源?
  • 我在 chrome 和 firefox 中都有 NaN,请清除 firefox cookie 并重试。
  • 谢谢 xdazz。现在我也成为了 Firefox 中的 NaN。所以问题出在我的代码中。

标签: javascript firefox google-chrome nan


【解决方案1】:

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

setCookie("tijd", timeRemaining);

收件人:

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

【讨论】:

    【解决方案2】:

    将 cookie 取出时出现问题,这是一个正在工作的小提琴:jsFiddle

    在你正在做的装载机中:

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

    应该是:

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

    此外,从 cookie 返回的数据的检查需要检查是否为 NaN,因为 get cookie 将返回 undefined 而 parseInt 将返回 NaN:

    if(timeRemaining==NaN)

    【讨论】:

    • 问题已解决。 Jeff Beck 确实注意到了一个类型错误。但最大的问题是 Chrome 的离线 cookie 存储。有关此检查的更多信息:stackoverflow.com/questions/335244/… 当我将测试页上传到我的虚拟主机时,它就像一个魅力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 2014-08-12
    • 2016-10-06
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多