Cookies и несколько окон / вкладок браузера - PullRequest
0 голосов
/ 17 февраля 2012

Я пытаюсь поделиться некоторой информацией между окнами / вкладками браузера, и мне не хватает локального хранилища HTML5 из-за проблем с поддержкой браузера. Гугл заставил меня поверить, что для этого могут быть использованы куки, поэтому я взял jquery.cookie и настроил простой тест.

Две страницы, которые пишут куки при загрузке:

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

и кнопка, которая отображает значение cookie в предупреждении для каждого:

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

При тестировании я вижу разные значения на каждой странице, что наводит меня на мысль, что это просто не работает, но я постоянно перебираю посты здесь и в других местах, где люди, кажется, рекомендуют это, поэтому мне интересно Я просто что-то делаю не так?

Ответы [ 3 ]

2 голосов
/ 17 февраля 2012

Файлы cookie обновляются только в среде JavaScript, если они установлены JS или при загрузке страницы.

localStorage был разработан для этого.IE8 поддерживает его просто отлично, это только действительно старый IE7 и ниже, которые не делают.Хотя IE9 предназначен только для Windows Vista и and 7, IE8 подходит для XP, поэтому у вас не должно возникнуть проблем с тем, чтобы просить пользователей, которые все еще используют устаревшие браузеры, обновить.

(я не могу сказать этого достаточно, но IE действительно нуждается в автообновлении, как и во всех других браузерах ...)

0 голосов
/ 17 февраля 2012

Попытка номер два = 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 голосов
/ 17 февраля 2012

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.

...