2011-08-25 11 views
13

Mam funkcję sprawdzania ciasteczek, która zapisuje zmienną wartości w var 'cookie1'. Plik cookie sessionStorage.Najbardziej elegancki sposób na sprawdzenie obsługi sessionStorage?

if (cookie1 == '9oz' | sessionStorage.getItem('sessionstoragecookie1') == '9oz') 
{ 
    // execute code 1 
} 
else 
{ 
    // execute code 2 
} 

Ale sessionStorage nie jest obsługiwane w IE6 i IE7. Więc rzuca błąd i przerywa cały skrypt. Mógłbym zrobić coś takiego, ale to absolutnie nie jest eleganckie. Jaki jest najbardziej elegancki sposób na obejście tego?

if (cookie1 == '9oz') 
{ 
    // execute code 1 
} 
else 
{ 
    if (typeof(sessionStorage) !='undefined') 
    { 
     if (sessionStorage.getItem('sessionstoragecookie1') == '9oz') 
     { 
      // execute code 1 
     } 
     else 
     { 
      // execute code 2 
     } 
    } 

    else 
     { 
      // execute code 2 
     } 
} 

Odpowiedz

12
if (cookie1 === '9oz' || (window.sessionStorage && window.sessionStorage.getItem('sessionstoragecookie1') === '9oz')) { 
    // you've got a 9oz reference 
} else { 
    // you haven't :(
} 
+0

Niestety, ta część '&& window.sessionStorage.getItem ('sessionstoragecookie1') == '9oz'' rzuci obiekt lub metoda nie jest obsługiwana w przeglądarce Internet Explorer 6/7. – user900973

+5

@ user900973: Nie powinien, ponieważ najpierw sprawdzam, czy window.sessionStorage istnieje; i ten kod zostanie wykonany, jeśli tak się stanie. – Matt

2
function checkSessionStorage() 
{ 
    return window.sessionStorage; 
} 

Jeśli jest undefined następnie sessionStorage nie jest obsługiwany.

+1

Jakie korzyści wynikają z zastosowania powyższego kodu zamiast "if (typeof (sessionStorage)! = 'Undefined')'? – user900973

5
if(typeof(sessionStorage) == 'undefined') 
{ 
    sessionStorage = { 
     getItem: function(){}, 
     setItem: function(){} 
    }; 
} 

I teraz używać jak zwykle. Będzie on zawsze zwraca NULL

Ale uważam ten skrypt

http://code.google.com/p/sessionstorage/

To pozwoli sessionStorage w każdej przeglądarce.

0

Możesz wypróbować coś takiego: Co zrobić, jeśli przeglądarka nie obsługuje sessionStorage, czyści sesję.

Powiązane problemy