diff --git a/.changeset/strange-hornets-trade.md b/.changeset/strange-hornets-trade.md new file mode 100644 index 0000000000..750a724372 --- /dev/null +++ b/.changeset/strange-hornets-trade.md @@ -0,0 +1,5 @@ +--- +'gitbook': patch +--- + +Even safer localStorage diff --git a/packages/gitbook/src/lib/local-storage.ts b/packages/gitbook/src/lib/local-storage.ts index fb0833d604..911afab4b6 100644 --- a/packages/gitbook/src/lib/local-storage.ts +++ b/packages/gitbook/src/lib/local-storage.ts @@ -3,11 +3,11 @@ */ export function getItem(key: string, defaultValue: T): T { try { - if (typeof localStorage === 'undefined') { - return defaultValue; + if (typeof localStorage !== 'undefined' && localStorage && 'getItem' in localStorage) { + const stored = localStorage.getItem(key); + return stored ? (JSON.parse(stored) as T) : defaultValue; } - const stored = localStorage.getItem(key); - return stored ? (JSON.parse(stored) as T) : defaultValue; + return defaultValue; } catch (error) { if (error instanceof Error && error.name === 'SecurityError') { return defaultValue; @@ -21,10 +21,9 @@ export function getItem(key: string, defaultValue: T): T { */ export function setItem(key: string, value: unknown) { try { - if (typeof localStorage === 'undefined') { - return; + if (typeof localStorage !== 'undefined' && localStorage && 'setItem' in localStorage) { + localStorage.setItem(key, JSON.stringify(value)); } - localStorage.setItem(key, JSON.stringify(value)); } catch (error) { if (error instanceof Error && error.name === 'SecurityError') { return;