2013-01-15 17 views
8

Czy mogę w jakiś sposób śledzić zmiany w plikach cookie (w mojej domenie) w javascript po stronie klienta. Na przykład funkcja, która jest wywoływana, gdy plik cookie zostanie zmienione, usunięte lub dodaneCzy mogę otrzymywać powiadomienia o zmianach plików cookie po stronie klienta javascript

w kolejności preferencji

  • standardowa przeglądarka krzyż
  • krzyż przeglądarka
  • przeglądarka specyficzny
  • rozszerzenie/plugin

Dlaczego? ponieważ pliki cookie, od których zależę w oknie/karcie # 1, mogą zostać zmienione w oknie/karcie # 2.

Dowiedziałem się, że chrome umożliwia powiadamianie o zmianach plików cookie. Ale to moja najmniej ulubiona opcja

+0

Cookie nie może zainicjować komunikację do ich strony internetowej. Obowiązkiem strony internetowej jest śledzenie zawartości plików cookie. – srijan

Odpowiedz

4

Jedną z opcji jest, aby napisać funkcję, która okresowo sprawdza cookie dla zmian:

var checkCookie = function() { 

    var lastCookie = document.cookie; // 'static' memory between function calls 

    return function() { 

     var currentCookie = document.cookie; 

     if (currentCookie != lastCookie) { 

      // something useful like parse cookie, run a callback fn, etc. 

      lastCookie = currentCookie; // store latest cookie 

     } 
    }; 
}(); 

window.setInterval(checkCookie, 100); // run every 100 ms 
  • W tym przykładzie użyto zamknięcie do pamięci trwałej. Funkcja zewnętrzna jest wykonywana natychmiast, zwracając wewnętrzną funkcję i tworząc prywatny zakres.
  • window.setInterval
+0

wydaje się być moją jedyną przenośną opcją – pm100

0

nieznacznej poprawie (pokazuje console.log dla każdego zmieniło cookie):

var checkCookie = function() { 

var lastCookies = document.cookie.split(';').map(function(x) { return x.trim().split(/(=)/); }).reduce(function(a, b) { 
     a[ b[ 0 ] ] = a[ b[ 0 ] ] ? a[ b[ 0 ] ] + ', ' + b.slice(2).join('') : 
     b.slice(2).join(''); return a; }, {}); 


return function() { 

    var currentCookies = document.cookie.split(';').map(function(x) { return x.trim().split(/(=)/); }).reduce(function(a, b) { 
     a[ b[ 0 ] ] = a[ b[ 0 ] ] ? a[ b[ 0 ] ] + ', ' + b.slice(2).join('') : 
     b.slice(2).join(''); return a; }, {}); 


    for(cookie in currentCookies) { 
     if (currentCookies[cookie] != lastCookies[cookie]) { 
      console.log("--------") 
      console.log(cookie+"="+lastCookies[cookie]) 
      console.log(cookie+"="+currentCookies[cookie]) 
     } 

    } 
    lastCookies = currentCookies; 

}; 
}(); 

window.setInterval(checkCookie, 100); 
Powiązane problemy