2012-02-12 210 views
3

我试图帮助我的一位朋友,他必须对人们测试弹出窗口(她研究通信科学)。所以基本上我们有两个网站,每个都有不同的弹出窗口她问我是否可以创建每分钟显示一个弹出窗口的内容。但是会议记录必须在多个页面上工作(例如,从索引开始,但是当我浏览网站并且弹出窗口的分钟必须显示时,无论网站的哪个页面打开)。Javascript在火狐浏览器中正确显示,但在Chrome中显示NaN

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

所以基本上console.log(“timeRemaining”)将显示在firefox(使用萤火虫)正确的数字倒计时,但在铬记录器(使用inspect元素)它会显示NaN。因此,div将不会显示(由于弹出窗口阻止程序,我没有使用新的窗口)。

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

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中。

火狐打印:

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

铬印:

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

在此先感谢。

编辑:删除我的cookies后,我也得到了一个N​​aN的Firefox。所以这个问题不仅仅是firefox和chrome之间的差异,而是我的代码中的一个基本错误。

EDIT2:

+0

好有您检查了“timeRemaining”cookie中的内容,传递给'parseInt()'的值来自哪里? – Pointy 2012-02-12 15:24:18

+2

我在Chrome和Firefox中都有NaN,请清除Firefox cookie并重试。 – xdazz 2012-02-12 15:26:29

+0

感谢xdazz。现在我也成为Firefox中的NaN。所以问题出在我的代码中。 – Najdo 2012-02-12 15:38:02

回答

1

有中得到的cookie回出了一个难题,这里是工作提琴:jsFiddle

在装载机你在做:

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

应该是:

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

还在为数据从cookie回来检查需要检查是否为NaN,因为get cookie将发回不确定和parseInt函数将回馈楠:

if(timeRemaining==NaN)

+1

问题已修复。 Jeff Beck发现了一个类型错误。但最大的问题是Chrome的离线cookie存储。 有关此检查的更多信息:http://stackoverflow.com/questions/335244/why-does-chrome-ignore-local-jquery-cookies 当我将测试页上传到我的虚拟主机时,它就像一个魅力。 – Najdo 2012-02-12 16:33:55

0

timeRemaining最初undefined,这是你传递什么setCookie。我认为如果你编辑以下内容,它可能会起作用。

setCookie("tijd", timeRemaining); 

要:

setCookie("tijd", timeRemaining || stdTijd); 
相关问题