mirror of
https://github.com/wassname/talk.git
synced 2026-07-01 12:55:21 +08:00
93 lines
1.9 KiB
JavaScript
93 lines
1.9 KiB
JavaScript
let available, error;
|
|
|
|
function storageAvailable(type) {
|
|
let storage = window[type], x = '__storage_test__';
|
|
try {
|
|
storage.setItem(x, x);
|
|
storage.removeItem(x);
|
|
return true;
|
|
} catch (e) {
|
|
error = 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.length !== 0
|
|
);
|
|
}
|
|
}
|
|
|
|
function lazyCheckStorage() {
|
|
if (typeof available === 'undefined') {
|
|
available = storageAvailable('localStorage');
|
|
}
|
|
}
|
|
|
|
export function getItem(item = '') {
|
|
lazyCheckStorage();
|
|
|
|
if (available) {
|
|
return localStorage.getItem(item);
|
|
} else {
|
|
console.error(
|
|
`Cannot get from localStorage. localStorage is not available. ${error}`
|
|
);
|
|
}
|
|
}
|
|
|
|
export function setItem(item = '', value) {
|
|
lazyCheckStorage();
|
|
|
|
if (available) {
|
|
return localStorage.setItem(item, value);
|
|
} else {
|
|
console.error(
|
|
`Cannot set localStorage. localStorage is not available. ${error}`
|
|
);
|
|
}
|
|
}
|
|
|
|
export function removeItem(item = '') {
|
|
lazyCheckStorage();
|
|
|
|
if (available) {
|
|
return localStorage.removeItem(item);
|
|
} else {
|
|
console.error(
|
|
`Cannot remove item from localStorage. localStorage is not available. ${error}`
|
|
);
|
|
}
|
|
}
|
|
|
|
export function clear() {
|
|
lazyCheckStorage();
|
|
|
|
if (available) {
|
|
return localStorage.clear();
|
|
} else {
|
|
console.error(
|
|
`Cannot clear localStorage. localStorage is not available. ${error}`
|
|
);
|
|
}
|
|
}
|
|
|
|
// window.addEventListener('storage', function(e) {
|
|
// const msg = `${e.key} " was changed in page ${e.url} from ${e.oldValue} to ${e.newValue}`;
|
|
// console.log(msg);
|
|
// });
|