1. ホーム
  2. javascript

[解決済み] Safariでhtml5 localStorageエラー。"QUOTA_EXCEEDED_ERR: DOM Exception 22: An attempt was made to add something to storage that exceeded the quota." と表示されます。

2022-06-22 03:49:20

質問

iosのサファリ・プライベートブラウジングで、私のウェブアプリケーションにjavascriptのエラーが発生しました。

JavaScript:エラー

未定義

QUOTA_EXCEEDED_ERR:DOM Exception 22:An attempt was made to add something to storage... (ストレージに何かを追加しようとしました。

私のコードです。

localStorage.setItem('test',1)

どのように解決するのですか?

どうやらこれは意図的なもののようです。Safari (OS X または iOS) がプライベート ブラウジング モードである場合、以下のように表示されます。 localStorage が利用できるように見えますが setItem を呼び出そうとすると例外が投げられます。

store.js line 73
"QUOTA_EXCEEDED_ERR: DOM Exception 22: An attempt was made to add something to storage that exceeded the quota."

何が起こるかというと、window オブジェクトはまだ localStorage をグローバルな名前空間で公開していますが setItem を呼び出すと、この例外がスローされます。への呼び出しはすべて removeItem の呼び出しは無視されます。

最も簡単な修正は、(まだクロスブラウザでテストしていないのですが)関数 isLocalStorageNameSupported() を変更して、何らかの値を設定することができることをテストすることです。

https://github.com/marcuswestin/store.js/issues/42

function isLocalStorageNameSupported() 
{
    var testKey = 'test', storage = window.sessionStorage;
    try 
    {
        storage.setItem(testKey, '1');
        storage.removeItem(testKey);
        return localStorageName in win && win[localStorageName];
    } 
    catch (error) 
    {
        return false;
    }
}