2014-08-31 3 views
-1

Моих требований:Как очистить локальное хранилище в браузере, но не обновить его?

  1. Have для обнаружения браузера события закрытия, и он не должен выполнить OnPage обновления.

  2. Если код работает только в браузере, то необходимо очистить localstorage.

  3. Уже я пробовал с onbeforeunload, но он выполняется в событии события закрытия и события браузера.

  4. Таким образом, мой код работает только в случае закрытия браузера, а не на обновлении страницы (F5 или нажатие на символ обновления).

+0

Возможный дубликат http://stackoverflow.com/questions/1631959/browser-window-close-event –

+0

@Moogs: Аспект хранения * может * сделать это отличным. –

+2

Зачем беспокоиться об использовании локального хранилища, если вы на самом деле не собираетесь ничего хранить? – jmort253

ответ

5

Вы не можете определить разницу между закрываемым браузером и обновленным окном/вкладкой, содержащей обновленную страницу. Информация просто недоступна.

Для вашего конкретного случая использования кажется, что вы можете использовать session storage, а не локальное хранилище. Точка хранения сеанса состоит в том, что она истекает, когда пользователь выполнил эту страницу. Вы можете попробовать, что с this example:

display("Existing <code>sessionStorage.foo</code>: " + sessionStorage.foo); 
sessionStorage.foo = new Date().toISOString(); 
display("New value set: " + sessionStorage.foo); 

Для меня на Firefox, Chrome и IE9 (так предположительно IE9 +), освежающий не ясно хранения сессий, но закрытие вкладки делает.

В качестве альтернативы вы можете установить временную метку в локальном хранилище при разгрузке страницы (от onbeforeunload), а когда вы вернетесь на страницу в будущем, если эта метка времени достаточно устарела, очистите хранилище и начинайте свежий. Это не очищает магазин, когда вы покидаете страницу, но делает act, как если бы это было, когда вы возвращались после интервала.

+0

, но объем хранилища сеансов - это только вкладка, поэтому вы не можете использовать несколько функций вкладки. –

+0

@PrashantPokhriyal: В этом вопросе нет ничего о функциональности нескольких вкладок. Но это сложнее, чем в любом случае: если новая вкладка (в том же самом источнике) открывается существующей вкладкой, они совместно используют хранилище сеансов, потому что контекст просмотра новой вкладки не является контекстом просмотра верхнего уровня (потому что его ' opener' - старая вкладка). Таким образом, нажатие ссылки «target =» _ blank »или« window.open »на вкладке« источник »означает, что целевая вкладка разделяет хранилище сеансов. –

+0

Но Если новая вкладка (в том же самом источнике) ** NOT ** открыта существующей вкладкой, то? –

0

Нет событий, которые начинаются с только Браузер закрыт. Ближайшим является событие onbeforeunload, которое выдается, когда окно собирается выгрузить свои ресурсы.

+0

Да, но мне нужно очистить localstorage только при закрытии события, когда я использовал его с onbeforeunload, он также выполняется для события обновления, поэтому я должен исключить событие обновления. Нужно и необходимо, PLZ найти решение – user3523448

+0

Посмотрите в хранилище сеансов https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage –