2012-02-12 213 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); 
相關問題