2011-08-25 22 views
13

我有一个cookie检查器函数,它在var'cookie1'中存储一个值变量。 还有一个sessionStorage存储cookie。最优雅的方法来检查sessionStorage的支持?

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

但IE6和IE7不支持sessionStorage。所以它会抛出一个错误并破坏整个脚本。我可以做这样的事情,但这绝对不是优雅。什么是最优雅的方式来解决这个问题?

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

回答

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

不幸的是,这部分&& window.sessionStorage.getItem('sessionstoragecookie1')=='9oz''会抛出一个对象或方法在Internet Explorer 6/7中不受支持。 – user900973

+5

@ user900973:不应该这样做,因为我首先检查window.sessionStorage存在;并且该代码将只在其执行时执行。 – Matt

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

如果是undefined然后sessionStorage不支持。

+1

什么上面使用,而不是效益为代码'如果(typeof运算(sessionStorage的)!= '不确定')'? – user900973

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

现在照常使用。它总是返回NULL

但我会考虑这个剧本

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

这将在每一个浏览器中启用的sessionStorage。

0

你可以尝试这样的: 它所做的是,如果浏览器不支持sessionStorage,它会清除会话。

try { 
    sessionStorage.setItem('name','value'); 
} 
catch(e){ 
if(e.code == 22){ 
    sessionStorage.clear(); } 
} 
相关问题