localStorage在无痕模式下被禁用的问题
发布在前端小菜鸡的填坑之路2016年2月3日view:7353HTML5
在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

原文出处:https://github.com/ForeverPx/blogs/blob/master/2016/01/localstorage_disabled.md 转载请注明出处。

在移动web开发中,经常会使用到localStorage去缓存一些数据,一般情况下,我们只需要按照下面的代码去使用就不会有 问题。

if(window.localStorage){
    localStorage.setItem('key','value');
}

但只是这样判断是不够的,现在的一些浏览器有一种功能叫无痕浏览,顾名思义,就是用户在浏览网页的过程中什么都不缓存, 什么也不记录,不留下痕迹。

自然地,localStorage也被禁用了。但此时window.localStorage并不是null,它还是原来的localStorage对象,只不过 这个对象的方法被禁用了。如果单纯只按上面的方法判断,js会抛出异常。

所以得用下面的代码去判断这个localStorage是否可用

var storageTest = function(storage){
    if(!!storage){
        try {
            storage.setItem("key", "value");
            storage.removeItem("key");
            return true;
        } catch(e){
            return false;
        }
    }else{
        return false;
    }
}

storageTest(window.localStorage);
storageTest(window.sessionStorage);
评论
发表评论
3年前

@zenxds 嗯嗯,对的

4年前

像chrome设置阻止网站设置任何数据,直接访问window.localStorage就有可能出错,window.localStorage这句本身就要放在try语句里

WRITTEN BY
PUBLISHED IN
前端小菜鸡的填坑之路

前端小菜鸡的填坑之路

我的收藏