2012-02-17 71 views
0

我試圖在瀏覽器窗口/選項卡之間共享一些信息,並且由於瀏覽器支持問題,我對HTML5本地存儲持懷疑態度。一些谷歌搜索導致我相信cookie可以用於此,所以我抓住jquery.cookie並設置了一個簡單的測試。加載時,其Cookie寫入Cookie和多個瀏覽器窗口/選項卡

兩個網頁:

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

並且在每個警報顯示cookie值的按鈕:

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

當測試,我看到在每個不同的值頁面,這會讓我相信這只是不起作用,但我一直在這裏和其他地方的帖子裏跑,人們似乎在推薦它,所以我想知道如果我只是做錯了什麼?

+0

這聽起來像你從來沒有嘗試讀取頁面上的cookie,然後用當前時間覆蓋它。如果是這樣,爲什麼結果是相同的? – Quentin 2012-02-17 14:47:30

+0

測試是,在頁面1中加載頁面,在頁面2中加載頁面,所以cookie應該具有由頁面2設置的值。當我單擊按鈕時,我在頁面1和頁面2中看到不同的值。我想要的是在兩頁上查看標籤2的值。 – lamont 2012-02-17 14:50:12

+0

那就是這個問題。在嘗試讀取之前,您會*覆蓋cookie值。 *加載頁面1.設置Cookie。讀取cookie。加載第2頁。**設置Cookie **。閱讀cookie。* – Quentin 2012-02-17 15:05:02

回答

2

只有在通過JS設置或加載頁面時,Cookie纔會在JavaScript環境中更新。

localStorage是爲此設計的。 IE8支持它就好了,它只是真正的老式IE7而不是它。儘管IE9僅適用於Windows-Vista-and-7,但IE8在XP上運行良好,因此您應該不會遇到麻煩,要求仍在陳舊瀏覽器上的用戶進行更新。

(我不能說這還不夠,但IE確實需要一個自動更新像所有其他瀏覽器...)

+1

這是一個企業應用程序,必須支持IE7。你是什​​麼意思,他們只是由JS設置更新?不是我在這裏做什麼? – lamont 2012-02-17 14:45:19

+0

我的意思是它們只在當前窗口中被更新,被設置在該窗口中。其他窗口必須重新加載以查看更改。我將在您可能更感興趣的解決方案中添加另一個答案。 – 2012-02-17 14:52:15

+0

因此需要重新加載。那是我認爲我將要結束的地方,只是尋求確認。 – lamont 2012-02-17 14:54:45

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嘗試在本地主機上。

+0

大聲笑我從記憶中輸入代碼和C#肌肉記憶接管。我糾正了它。 – lamont 2012-02-17 14:48:43

+0

加載兩個選項卡並嘗試。你會得到兩個不同的值。 – lamont 2012-02-17 15:32:15

0

嘗試二號= 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設置一個cookie,但到得到他們你現在用cookiedata.cookiename

5000調整爲響應和重新加載數據之間的妥協。

+0

謝謝。請不要採取這個人 - 我知道這是瀏覽器「防火牆」的產品 - 但看起來很可怕;) – lamont 2012-02-17 15:31:28

+0

這可能是因爲我拒絕使用jQuery,以至於你發現這個醜陋:p我個人覺得jQuery醜陋,但每一個他自己我猜? – 2012-02-17 15:32:25

相關問題