2011-08-25 11 views
13

Tengo una función de corrector de cookies, que almacena una variable de valor en var 'cookie1'. Y una cookie de almacenamiento sessionStorage.La manera más elegante de verificar la sesión ¿Soporte de almacenamiento?

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

Pero sessionStorage no es compatible con IE6 e IE7. Entonces arroja un error y rompe todo el script. Podría hacer algo como esto, pero esto no es absolutamente elegante. ¿Cuál es la forma más elegante de solucionar esto?

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 
     } 
} 

Respuesta

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

Lamentablemente, esta parte '&& window.sessionStorage.getItem ('sessionstoragecookie1') == '9oz'' arrojará un objeto o método no es compatible con Internet Explorer 6/7. – user900973

+5

@ user900973: No debería hacer, porque primero compruebo que window.sessionStorage existe; y ese código solo se ejecutará si lo hace. – Matt

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

Si es undefined continuación sessionStorage no es compatible.

+1

¿Cuál es la ventaja de que el código anterior use esto en lugar de 'if (typeof (sessionStorage)! = 'Undefined')'? – user900973

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

y ahora usan como de costumbre. Siempre devolverá NULL

pero yo consideraría este script

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

Esto permitirá sessionStorage en todos los navegadores.

0

Puede intentar algo como esto: Lo que hace es que si un navegador no admite sessionStorage, borra la sesión.

try { 
    sessionStorage.setItem('name','value'); 
} 
catch(e){ 
if(e.code == 22){ 
    sessionStorage.clear(); } 
} 
Cuestiones relacionadas