2012-02-17 17 views
0

ブラウザのウィンドウ/タブ間でいくつかの情報を共有しようとしていますが、ブラウザサポートの問題のためにHTML5ローカルストレージのことを心配しています。いくつかのグーグルが私にクッキーがこれに使用されると信じてくれるので、jquery.cookieをつかんで簡単なテストを設定しました。ロードされたときにクッキーを書くクッキーと複数のブラウザウィンドウ/タブ

2ページ:

$.cookie("testValue", new Date().getTime()); 

と各上の警告にクッキーの値を表示するボタン:

alert($.cookie("testValue")); 

テストするとき、私はそれぞれに異なる値を参照してください私はこれがちょうどうまくいかないと信じさせてくれるでしょうが、私はここや他の人がそれを推薦しているように見えるので、何か間違っているのだろうかと思っています。

+0

現在の時刻でページを上書きする前に、ページ上のCookieを読もうとしないようです。もしそうなら、なぜ結果は同じになるでしょうか? – Quentin

+0

テストは、タブ1のページを読み込み、タブ2のページを読み込みます。したがって、クッキーはタブ2で設定された値を持つ必要があります。ボタンをクリックすると、タブ1とタブ2に異なる値が表示されます。私が望むのは、両方のページでタブ2の値を見ることです。 – lamont

+0

それは問題です。あなたはそれを読み返す前にクッキーの値を上書きします。 *ページを読み込む1. Cookieを設定します。クッキーを読んでください。ページをロードしてください。** Set Cookie **。 * – Quentin

答えて

2

Cookieは、JavaScript環境で設定されたとき、またはページが読み込まれたときにのみ更新されます。

localStorageはこのために設計されています。 IE8はこれをうまくサポートしていますが、これは本当に古いIE7以下ではありません。 IE9はWindows-Vista-and-7-onlyですが、IE8はXP上でも問題ないので、古いブラウザを使用しているユーザーに更新を依頼することはありません。

(私はこの十分に言うことはできませんが、IEは本当に他のすべてのブラウザのような自動アップデータを必要とする...)

+1

これは企業向けアプリです。IE7はサポートされていなければなりません。そして、彼らがJSによって設定されたときだけ更新されるということは何を意味しますか?私はここでやっていることではありませんか? – lamont

+0

私は彼らがそのウィンドウに設定されているだけで現在のウィンドウで更新されていることを意味します。変更を確認するには、他のウィンドウを再ロードする必要があります。もっと興味があるかもしれない解決策を使って別の回答を追加します。 –

+0

リロードが必要です。それが、私が私が巻き上げようと思っていたところで、確認を探しているところです。 – lamont

0

DateTime()が定義されていません。代わりにDate()を使用してください。

$.cookie("testValue", new Date().getTime());

とにかく、それは私のために動作します。簡単なhtmlページは次のとおりです:

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
    <title>demo</title> 
    <script type='text/javascript' src='http://code.jquery.com/jquery-1.7.1.js'></script> 
    <script type='text/javascript' src="https://raw.github.com/carhartl/jquery-cookie/master/jquery.cookie.js"></script> 
    <script type='text/javascript'> 
    $(window).load(function(){ 
     $("#get").click(function(){ 
      alert($.cookie("testValue")); 
     }); 
     $("#set").click(function(){ 
      $.cookie("testValue", new Date().getTime()); 
     }); 
    }); 
    </script> 
</head> 
<body> 
    <a id="get" href="#">get cookie</a> 
    <a id="set" href="#">set cookie</a> 
</body> 
</html> 

FireFox 10.0を使ってlocalhostで試してみました。

+0

笑私はメモリからコードを入力していましたが、C#の筋肉のメモリが引き継ぎました。私はそれを修正しました。 – lamont

+0

2つのタブで読み込み、試してみてください。 2つの異なる値が得られます。 – lamont

0

試行番号2 = P

このような何かを試してみてください:

<iframe id="cookies" src="refresher.html" style="display: none"; /> 
<script type="text/javascript"> 
    (function() { 
     var ifr = document.getElementById('cookies'); 
     setInterval(function() { 
      var cd = ifr.contentDocument.cookie.split(";"); 
       l = cd.length, i, k, ret = {}; 
      for(i=0; i<l; i++) { 
       k = cd[i].split("="); 
       k[0] = k[0].replace(/^ +| +$/g,''); 
       k[1] = k[1].replace(/^ +| +$/g,''); 
       ret[k[0]] = k[1]; 
      } 
      window.cookiedata = ret; 
     },5000); 
    })(); 
</script> 

refresher.html:

<script type="text/javascript">setTimeout(function() {location.reload();},5000);</script> 

あなたはまだ使用できるjQueryの$.cookieにはにクッキーを設定したが、 を取得しました。cookiedata.cookienameを使用しています。

応答性と再読み込みデータの間に良い妥協点があるように調整してください(5000)。

+0

ありがとうございます。これを個人的に取ってはいけません。ブラウザの「ファイアウォール」の製品であることはわかっていますが、それはちょっと恐ろしいものです) – lamont

+0

これはおそらく、jQueryを使用することを拒否したためです。 jQueryは醜いですが、彼自身は私が推測していますか? –

関連する問題