mirror of
https://github.com/facebook/docusaurus.git
synced 2025-06-09 06:12:28 +02:00
fix(v2): Browser storage (localStorage) is unreliable: api should fail-safe (#6040)
This commit is contained in:
parent
373eda272e
commit
95f911efef
1 changed files with 26 additions and 3 deletions
|
@ -79,6 +79,10 @@ Please only call storage APIs in effects and event handlers.`);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an object for accessing a particular key in localStorage.
|
* Creates an object for accessing a particular key in localStorage.
|
||||||
|
* The API is fail-safe, and usage of browser storage should be considered unreliable
|
||||||
|
* Local storage might simply be unavailable (iframe + browser security) or operations might fail individually
|
||||||
|
* Please assume that using this API can be a NO-OP
|
||||||
|
* See also https://github.com/facebook/docusaurus/issues/6036
|
||||||
*/
|
*/
|
||||||
export const createStorageSlot = (
|
export const createStorageSlot = (
|
||||||
key: string,
|
key: string,
|
||||||
|
@ -92,9 +96,28 @@ export const createStorageSlot = (
|
||||||
return NoopStorageSlot;
|
return NoopStorageSlot;
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
get: () => browserStorage.getItem(key),
|
get: () => {
|
||||||
set: (value) => browserStorage.setItem(key, value),
|
try {
|
||||||
del: () => browserStorage.removeItem(key),
|
return browserStorage.getItem(key);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(`Docusaurus storage error, can't get key=${key}`, e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
set: (value) => {
|
||||||
|
try {
|
||||||
|
browserStorage.setItem(key, value);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(`Docusaurus storage error, can't set ${key}=${value}`, e);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
del: () => {
|
||||||
|
try {
|
||||||
|
browserStorage.removeItem(key);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(`Docusaurus storage error, can't delete key=${key}`, e);
|
||||||
|
}
|
||||||
|
},
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue