2011-08-25 58 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(); } 
} 
相關問題