最优雅的方式来检查sessionStorage支持?

问题描述 投票:15回答:5

我有一个cookie检查器函数,它在var'cookie1'中存储一个值变量。还有一个sessionStorage存储cookie。

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
        }
}
javascript
5个回答
13
投票
if (cookie1 === '9oz' || (window.sessionStorage && window.sessionStorage.getItem('sessionstoragecookie1') === '9oz')) {
    // you've got a 9oz reference 
} else {
    // you haven't :(
}

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

现在像往常一样使用。它将始终返回NULL

但我会考虑这个剧本

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

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


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

如果是undefined则不支持sessionStorage


1
投票

我会使用try / catch来检查浏览器是否支持sessionStorage。

function isSessionStorageSupported() {
    var storage = window.sessionStorage;
    try {
      storage.setItem('test', 'test');
      storage.removeItem('test');    
      return true;
    } catch (e) {
      return false;
    }
}

使用这样的功能:

 if (isSessionStorageSupported()) {
   // do something with it
 } else {
  // have a fallback code here
}

0
投票

您可以尝试这样的事情:它的作用是,如果浏览器不支持sessionStorage,它会清除会话。

try { 
   sessionStorage.setItem('name','value'); 
}
catch(e){
if(e.code == 22){ 
   sessionStorage.clear(); }
} 
© www.soinside.com 2019 - 2024. All rights reserved.