2012-02-12 3 views
3

私はポップアップについての人々のテストをしなければならない友人を助けようとしています(コミュニケーション科学を学ぶ)。だから基本的に私たちは2つのウェブサイトをそれぞれ別のポップアップがあります。彼女は毎分ポップアップを表示するものを作成できるかどうか私に尋ねました。しかし、分はいくつかのページ(例えば、インデックスから始まるが、ウェブサイトの周りをブラウズして、ポップアップが表示されていなければ、ウェブサイトのどのページが開いていても問題ありません)を処理する必要があります。JavascriptはFirefoxでも正しく動作しますが、ChromeにはNaNが付いています

私は問題と接触してから3年前になっているので、私のjavascriptは少し錆びています。だから、問題のために私は古いjavascript課題のいくつかを使用して、私はクッキーを使って問題を解決すると思った。それは私がいくつかの問題に対して実行したグローバル変数の使用にあります。彼女は大学のコンピュータでそれをテストしなければならないので、ウェブサイトをfirefox/chrome/IEで動作させたいと思っています。

したがって、console.log( "timeRemaining")はfirefoxの正しいカウントダウンを(firebugを使用して)表示しますが、chrome logger(inspect要素を使用)ではNaNを表示します。したがって、divは表示されません(私はポップアップブロッカーのために新しいウィンドウを使用しません)。

どこが問題なのですか?私はすでに、cookieから返された値がparseIntを使って解析されていることを確認しました。私はなぜこの単純なコードがFirefoxよりも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で指定します。

Firefoxの版画:

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

クロームプリント:事前に

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

感謝。

EDIT:私のクッキーを削除した後、私はFirefoxでもNaNを取得します。ですから、問題はFirefoxとChromeの違いだけでなく、コード内の基本的なエラーです。

EDIT2:

+0

まあ持っています'timeRemaining 'クッキーにある値、' parseInt() 'に渡された値がどこにあるのか確認しましたか? – Pointy

+2

私はchromeとfirefoxにNaNの両方を持っており、firefoxのクッキーをクリアしてもう一度やり直します。 – xdazz

+0

ありがとうxdazz。今私はFirefoxでもNaNになります。だから問題は私のコードにあります。 – Najdo

答えて

1

問題はバックアウトCookieを得ることにありました、ここで働いているフィドルです:あなたがやっていたローダーでjsFiddle

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

これは次のとおりです。

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

クッキーは未定義送り返しますGETとのparseIntがNaNをバック与えるとしても、バッククッキーからのデータのチェックは、NaNのかどうかを確認する必要があります:

if(timeRemaining==NaN)

+1

問題は修正されています。実際にJeff Beckが気付いた型エラーがありました。しかし、最大の問題は、ChromeによるオフラインCookieストレージでした。 このチェックの詳細については、http://stackoverflow.com/questions/335244/why-does-chrome-ignore-local-jquery-cookies 私がウェブホスティングにテストページをアップロードしたとき、それは魅力的なように機能しました。 – Najdo

0

timeRemainingが最初undefinedあり、これはあなたがsetCookieに渡しているものです。私はあなたが以下を編集すれば、うまくいくと思う。

setCookie("tijd", timeRemaining); 

へ:

setCookie("tijd", timeRemaining || stdTijd); 
関連する問題