javascript - Как удалить элемент localStorage при закрытии окна браузера / вкладки?




8 Answers

должно выполняться так, а не с оператором удаления:

localStorage.removeItem(key);

Мой случай: localStorage с ключом + значение, которое должно быть удалено при закрытии браузера, а не одной вкладке.

Пожалуйста, посмотрите мой код, если он правильный и что можно улучшить:

//create localStorage key + value if not exist
if(localStorage){
   localStorage.myPageDataArr={"name"=>"Dan","lastname"=>"Bonny"}; 
}

//when browser closed - psedocode
$(window).unload(function(){
  localStorage.myPageDataArr=undefined;
});



Использовать с ключевым словом global:

 window.localStorage.removeItem('keyName');



Попробуйте использовать

$(window).unload(function(){
  localStorage.clear();
});

Надеюсь, что это работает для вас




использовать sessionStorage

Объект sessionStorage равен объекту localStorage, за исключением того, что он хранит данные только для одного сеанса. Данные удаляются, когда пользователь закрывает окно браузера.

В следующем примере подсчитывается количество нажатий кнопки пользователя в текущем сеансе:

пример

if (sessionStorage.clickcount) {
    sessionStorage.clickcount = Number(sessionStorage.clickcount) + 1;
} else {
    sessionStorage.clickcount = 1;
}
document.getElementById("result").innerHTML = "You have clicked the button " +
sessionStorage.clickcount + " time(s) in this session.";



Я не думаю, что решение, представленное здесь, на 100% правильное, потому что событие window.onbeforeunload вызывается не только при закрытии браузера / вкладки (КОТОРЫЙ НЕОБХОДИМО), но и во всех других событиях. (КОТОРЫЙ НЕ МОЖЕТ БЫТЬ НЕОБХОДИМО)

См. Эту ссылку для получения дополнительной информации о списке событий, которые могут срабатывать window.onbeforeunload: -

http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx




Хотя некоторые пользователи уже уже ответили на этот вопрос, я приводил пример настроек приложения для решения этой проблемы.

Я была такая же проблема. Я использую https://github.com/grevory/angular-local-storage модуль в моем приложении angularjs. Если вы настроите свое приложение следующим образом, оно сохранит переменную в хранилище сеансов вместо локального хранилища. Поэтому, если вы закроете браузер или закроете вкладку, хранилище сеансов будет удалено автоматически. Вам не нужно ничего делать.

app.config(function (localStorageServiceProvider) {
  localStorageServiceProvider
  .setPrefix('myApp')
  .setStorageType('sessionStorage')
});

Надеюсь, это поможет.




Рассмотрев этот вопрос через 6 лет после его запроса, я обнаружил, что ответа на этот вопрос пока нет. который должен достичь всего следующего:

  • Очистить локальное хранилище после закрытия браузера (или всех вкладок домена)
  • Сохранять локальное хранилище на вкладках, если хотя бы одна вкладка остается активной
  • Сохранять локальное хранилище при перезагрузке одной вкладки

Выполните этот кусок javascript в начале загрузки каждой страницы, чтобы достичь вышеуказанного:

((nm,tm) => {
    const
            l = localStorage,
            s = sessionStorage,
            tabid = s.getItem(tm) || (newid => s.setItem(tm, newid) || newid)((Math.random() * 1e8).toFixed()),
            update = set => {
                let cur = JSON.parse(l.getItem(nm) || '{}');
                if (set && typeof cur[tabid] == 'undefined' && !Object.values(cur).reduce((a, b) => a + b, 0)) {
                    l.clear();
                    cur = {};
                }
                cur[tabid] = set;
                l.setItem(nm, JSON.stringify(cur));
            };
    update(1);
    window.onbeforeunload = () => update(0);
})('tabs','tabid');



Это будет работать как шарм, если вы используете AngularJS

$localStorage.$reset(); 



Related