2012-02-05 9 views
9

Mam prostą aplikację HTML5, nad którą obecnie pracuję i zastanawiam się, czy istnieje możliwość usunięcia elementu w Magazynie lokalnym HTML5 po pewnym czasie, np .: po 24 godzinach, usuń ten element itp.Usunięcie elementu w Magazynie lokalnym HTML5 po pewnym czasie?

Myślę, że obiekt Data wbudowany w JavaScript byłby prawdopodobnie tym, czego potrzebuję.

Czy to możliwe? Niektóre przykłady kodu byłyby miłe, gdybyś mógł, dzięki!

Odpowiedz

10

Mogłeś zapisać datę wraz z danymi

//add data we are interested in tracking to an array 
var values = new Array(); 
var oneday = new Date(); 
oneday.setHours(oneday.getHours() + 24); //one day from now 
values.push("hello world"); 
values.push(oneday); 
try { 
    localStorage.setItem(0, values.join(";")); 
} 
catch (e) { } 

//check if past expiration date 
var values = localStorage.getItem(0).split(";"); 
if (values[1] < new Date()) { 
    localStorage.removeItem(0); 
} 
+0

Lubię to rozwiązanie jednak myślę, że należy zauważyć w tym konkretnym przykładzie, że wartości [1] musi być analizowany w obiekt Date przed jej porównywać. Podobnie jak ta nowa data (wartości [1]) – labago

0

Jeśli chcesz to zrobić, myślę, że po prostu trzeba to zrobić ręcznie. Na przykład można zapisać znacznik czasu w gnieździe localStorage obok każdej przechowywanej wartości, a następnie sprawdzić sygnaturę czasową w stosunku do bieżącego czasu w regularnych odstępach czasu, takich jak ładowanie strony lub setTimeout lub coś podobnego.

przykład:

//this function sets the value, and marks the timestamp 
function setNewVal(prop) 
{ 
    window.localStorage[prop] = Math.random(); 
    window.localStorage[prop+"timestamp"] = new Date(); 
} 

//this function checks to see which ones need refreshing 
function someRucurringFunction() 
{ 
    //check each property in localStorage 
    for (var prop in window.localStorage) 
    { //if the property name contains the string "timestamp" 
     if (prop.indexOf("timestamp") != -1) 
     { //get date objects 
      var timestamp = new Date(window.localStorage[prop]); 
      var currentTime = new Date(); 

      //currently set to 30 days, 12 hours, 1 min, 1s (don't set to 0!) 
      var maxAge = (1000 * 1) *//s 
          (60  * 1) *//m 
          (60  * 12) *//h 
          (24  * 30); //d 

      if ((currentTime - timestamp) > maxAge) 
      {//if the property is too old (yes, this really does work!) 
       //get the string of the real property (this prop - "timestamp") 
       var propString = prop.replace("timestamp",""); 
       //send it to some function that sets a new value 
       setNewVal(propString); 
      } 
     } 
    } 
} 
//set the loop 
window.setInterval(someRucurringFunction,(1000*60*60); 

Edycja: Metoda mrtsherman byłby całkowicie działa również. Podobnie możesz wpisać znacznik czasu jako właściwość obiektu, który możesz przechowywać/pobierać za pomocą JSON.stringify/parse(). Jeśli zarówno tablica, jak i obiekt są bardzo duże lub masz ich bardzo wiele, prawdopodobnie sugerowałbym użycie metody właściwości równoległych dla wydajności.

-3
window.setInterval(function() { 
     localStorage.setItem('nicwincount', 0); 
},8640000); //24 * 60mins * 60sec 

ps: nicwincount to lokalny serwis, który ustawiłeś wcześniej. localStorage.setItem ("kanały", kod ekstencyjny (kanały));

nadzieja może ci pomóc.

+1

Czy to nie oznacza, że ​​urządzenie pozostaje na stronie przez 24 godziny? Mało prawdopodobne! ;-) – markE

1

korzystać z tego rozwiązania:

(function() { 

    var lastclear = localStorage.getItem('lastclear'), 
     time_now = (new Date()).getTime(); 

    // .getTime() returns milliseconds so 1000 * 60 * 60 * 24 = 24 days 
    if ((time_now - lastclear) > 1000 * 60 * 60 * 24) { 

    localStorage.clear(); 

    localStorage.setItem('lastclear', time_now); 
    } 

})(); 
+0

którzy muszą zostać ?! Sprawdza on localStorage, jeśli odwiedzasz stronę w ostatnim X czasie i usuwa ją, jeśli jest większa. –

+0

Więc daj +1, jeśli to działa dla twojego –

+0

Myślę, że masz na myśli 1000 * 60 * 60 * 24 = 24 godziny, a nie 24 dni – Yuhao