我知道有许多关于检查许多问题localStorage
但如果有人手动关闭它关闭在其浏览器? 下面是我使用来检查代码:
localStorage.setItem('mod', 'mod');
if (localStorage.getItem('mod') != null){
alert ("yes");
localStorage.removeItem('mod');
}else{
alert ("no");
}
简单的功能和它的作品。 但是,如果我进入我的Chrome设置,选择选项“不保存数据”(我不记得确切它叫什么),当我尝试运行这个功能,我得到什么,但Uncaught Error: SecurityError: DOM Exception 18
。 那么,有没有一种方法来检查的人已是完全关闭?
更新:这是我试过的第二个功能,我仍然没有得到响应(警报)。
try {
localStorage.setItem("name", "Hello World!");
} catch (e) {
if (e == QUOTA_EXCEEDED_ERR) {
alert('Quota exceeded!');
}
}
Answer 1:
使用modernizr
的方法(你可能想改变我的函数名更好的东西):
function lsTest(){
var test = 'test';
try {
localStorage.setItem(test, test);
localStorage.removeItem(test);
return true;
} catch(e) {
return false;
}
}
if(lsTest() === true){
// available
}else{
// unavailable
}
它不像其他方法简洁但这是因为它的设计,最大限度的兼容性。
原始来源: https://github.com/Modernizr/Modernizr/blob/master/feature-detects/storage/localstorage.js
工作示例: http://jsfiddle.net/6sm54/2/
Answer 2:
我检查localStorage
之前依赖于它的任何行动定义:
if (typeof localStorage !== 'undefined') {
var x = localStorage.getItem('mod');
} else {
// localStorage not defined
}
更新:
如果您需要验证该功能是存在的,并且它也没有关闭,你必须使用一个更安全的方法。 为了万无一失:
if (typeof localStorage !== 'undefined') {
try {
localStorage.setItem('feature_test', 'yes');
if (localStorage.getItem('feature_test') === 'yes') {
localStorage.removeItem('feature_test');
// localStorage is enabled
} else {
// localStorage is disabled
}
} catch(e) {
// localStorage is disabled
}
} else {
// localStorage is not available
}
Answer 3:
特征检测本地存储是棘手的。 你需要真正达到了进去。 这样做的原因是,Safari浏览器选择提供一个功能localStorage
私人模式下的对象, 但与它的定额设置为零 。 这意味着,尽管所有简单的功能检测将传递到任何电话localStorage.setItem
会抛出异常。
Web存储API的Mozilla的开发者网络项目有一个对特征检测本地存储专用部分 。 下面是该网页推荐的方法:
function storageAvailable(type) {
try {
var storage = window[type],
x = '__storage_test__';
storage.setItem(x, x);
storage.removeItem(x);
return true;
}
catch(e) {
return false;
}
}
这里是你将如何使用它:
if (storageAvailable('localStorage')) {
// Yippee! We can use localStorage awesomeness
}
else {
// Too bad, no localStorage for us
}
如果您使用NPM,你可以抓住存储提供使用
npm install -S storage-available
然后使用功能,像这样:
if (require('storage-available')('localStorage')) {
// Yippee! We can use localStorage awesomeness
}
免责声明 :无论在MDN文档部分和NPM包都由我创作。
Answer 4:
MDN 更新存储检测功能。 在2018年,它更可靠:
function storageAvailable() {
try {
var storage = window['localStorage'],
x = '__storage_test__';
storage.setItem(x, x);
storage.removeItem(x);
return true;
}
catch(e) {
return e instanceof DOMException && (
// everything except Firefox
e.code === 22 ||
// Firefox
e.code === 1014 ||
// test name field too, because code might not be present
// everything except Firefox
e.name === 'QuotaExceededError' ||
// Firefox
e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&
// acknowledge QuotaExceededError only if there's something already stored
storage && storage.length !== 0;
}
}
支持localStorage的浏览器将有一个名为localStorage的窗口对象上的属性。 然而,由于种种原因,只是声称属性存在可能会抛出异常。 如果它确实存在,这仍然不能保证localStorage的实际可用,各种浏览器提供的是禁用的localStorage设置。 所以,浏览器可以支持本地存储,而不是将其提供给网页上的脚本。 这方面的一个例子是Safari浏览器,这在隐私浏览模式为我们提供了具有零配额空localStorage的对象,有效地使之无法使用。 但是,我们仍然可能会得到一个合法的QuotaExceededError,只意味着我们已经用完了所有可用的存储空间,而存储是实际可用 。 我们的功能检测应该把这些情形考虑在内。
在这里看到一个功能检测localStorage的简史 。
Answer 5:
有了这个功能,你可以检查的localStorage是可用的,而且你控制住可能的例外。
function isLocalStorageAvailable() {
try {
var valueToStore = 'test';
var mykey = 'key';
localStorage.setItem(mykey, valueToStore);
var recoveredValue = localStorage.getItem(mykey);
localStorage.removeItem(mykey);
return recoveredValue === valueToStore;
} catch(e) {
return false;
}
}
Answer 6:
下面是一个简单的检查:
if(typeof localStorage === 'undefined'){
Answer 7:
修改乔的回答添加getter使得它更容易使用。 随着下面你简单地说: if(ls)...
Object.defineProperty(this, "ls", {
get: function () {
var test = 'test';
try {
localStorage.setItem(test, test);
localStorage.removeItem(test);
return true;
} catch(e) {
return false;
}
}
});
Answer 8:
使用此检查localStorage的设置与否。 它帮助你得到的localStorage的状态。
if( window.localStorage.fullName !== undefined){
//action
}else{
}
文章来源: Check if localStorage is available