Safari での html5 localStorage エラー: 「QUOTA_EXCEEDED_ERR: DOM 例外 22: ストレージにクォータを超えるものを追加しようとしました。」 質問する

Safari での html5 localStorage エラー: 「QUOTA_EXCEEDED_ERR: DOM 例外 22: ストレージにクォータを超えるものを追加しようとしました。」 質問する

私のウェブアプリでは、iOS Safari プライベート ブラウジングで JavaScript エラーが発生します。

JavaScript:エラー

未定義

QUOTA_EXCEEDED_ERR:DOM 例外 22:ストレージに何かを追加しようとしました...

私のコード:

localStorage.setItem('test',1)

ベストアンサー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."

何が起こるかというと、ウィンドウ オブジェクトは引き続き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;
    }
}

おすすめ記事