Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   как узнать если поддержка Web Storage? (https://javascript.ru/forum/misc/32759-kak-uznat-esli-podderzhka-web-storage.html)

dmitry111 29.10.2012 14:19

как узнать если поддержка Web Storage?
 
Казалось бы должно работать

if (!localStorage) {
// в браузере нет поддержки
}


В браузере safari есть опция "Частный доступ", при ее включении содержимое localStorage недоступно, создать новое св-во нельзя, но условие выше не срабатывает.
Видимо localStorage есть, но сафари не работает с ним в данном режиме и localStorage.length == 0

Как мне узнать что web Storage в браузере есть, но у пользователя включен "Частный доступ"?


Прописал в этом режиме так:
localStorage.prop = "value";
alert(localStorage.prop);

Хотел узнать что выдаст алерт, а он вообще не всплыл(

nerv_ 30.10.2012 00:12

alert( window.sessionStorage || window.localStorage );

Nekromancer 30.10.2012 00:16

Ну раз не всплыл, значит там ошибка.
var supportStorage = false;

if ('localStorage' in window) {
  try {
    localStorage.setItem('test', 1);
    supportStorage = true;
  } catch (e) {}

  if (supportStorage) {
    localStorage.removeItem('test');
  }
}

dmitry111 30.10.2012 09:10

nerv_,

хотелось бы чтоб можно было решить так, но это не будет работать где есть поддержка, но нет доступа (как в моем случае)

Nekromancer,

Да, так работает! Хоть может затереть уже имеющееся св-во, но в моем случае это решаемо.
Спасибо!

dmitry111 30.10.2012 09:15

Кстати, заметил особенность с localStorage в opera 12.02
Если пробежаться по свойствам объекта, то по дефолту там уже будет localStorage.length

:)

Nekromancer 30.10.2012 14:19

dmitry111,
Можно рендомным ключём проверять.
var supportStorage = false,
  supportKey = 'supportKey' + Math.random();

if ('localStorage' in window) {
  try {
    localStorage.setItem(supportKey, 1);
    supportStorage = true;
  } catch (e) {}

  if (supportStorage) {
    localStorage.removeItem(supportKey);
  }
}

alert(supportStorage);

dmitry111 30.10.2012 16:36

Nekromancer,

да, можно и так


Часовой пояс GMT +3, время: 02:25.