HTML5(localStorage)で利用可能なクライアント側ストレージをiPhoneアプリケーションに使用しようとしていますが、localStorage(whichに関連付けられている "[〜#〜] quote [〜#〜]"を完全に認識しています。現在5MB)です。
今、問題は私のアプリケーション(以前にデータが保存されていない)にあります。データをlocalStorageに保存しようとすると、結果としてQUOTA_EXCEEDED_ERRになりますが、データ全体のサイズは5 MB未満です(正確には〜4Kb(chrome通常のブラウザのWebインスペクタ))
データの重さが4Kbの場合、同じ上限が5MBの場合、QUOTA_EXCEEDED_ERRになるということを誰かが共有できますか?
問題はiPhoneでのみ発生、すべてのブラウザであり、iPhone SimulatorでもQUOTA_EXCEEDED_ERRエラーが表示されないことに注意してください
iPhoneは現在iPhone4です。
[設定]-> [Safari]に移動し、プライベートブラウジングがオンになっているかどうかを確認します。そうである場合、ローカルストレージは何も保存できません。ローカルストレージをチェックするための基本的なコードは次のとおりです。
_if (!!window.localStorage)
{
localStorage.setItem(key, val);
};
_
また、どのように設定していますか? localStorage.setItem(key, val)
を使用していますか、それともlocalStorage(key, val)
を試していますか?間違った設定が原因で問題が発生している可能性があります
同じ問題が発生しましたが、JoeCortopassiは部分的にしか正しくありません。これは、プライベートブラウジングが有効になっていることが原因です。ただし、その回答で提供されているコードはあまり役に立ちません。 iPad Safari(ios5)でテストしたところ、
console.log(!!window.localStorage); // true
値を設定しようとするとすぐに、例外が発生します。
localStorage.setItem("test", "test") // Exception 22 is thrown
したがって、ローカルストレージのサポートを正確にテストするには、ローカルストレージに値を設定してみる必要があります。次に例を示します。
var localStorageSupported = function() {
try {
localStorage.setItem("test", "test");
localStorage.removeItem("test");
return true;
} catch(e){
return false;
}
}
実際のところ、Safari for iOS <6でプライベートブラウジングモードを使用しても、window.localStorage
とwindow.sessionStorage
は空になりません。したがって、!!window.localStorage
または!!window.sessionStorage
をチェックするだけでは不十分です。これらのコンポーネントから呼び出すと失敗し、これがスローされますQUOTA_EXCEEDED_ERRエラー。
これらのプラットフォームでは、プライベートモードでクォータがゼロに設定されているようです。これが、Modernizrと同じように、これらの機能を実際にテストするために、try ... catchステートメントでラップする必要がある理由です。
Modernizrコード:
var mod = 'modernizr';
/*...*/
tests['localstorage'] = function() {
try {
localStorage.setItem(mod, mod);
localStorage.removeItem(mod);
return true;
} catch(e) {
return false;
}
};
Web APIを信頼する必要がありますが、慎重に行ってください。
新しい値を設定する前に、値を削除してみてください。
localStorage.removeItem(key);
localStorage.setItem(key, val);
似ているので、 この質問 も参照してください。
ローカルストレージの割り当てはドメインに関連付けられています。データストレージを使用する他のページがある場合、それらがいっぱいになる可能性があります。キーを繰り返して、例外が発生したときにストレージに何があるかを調べます。
try {
// try to insert storage here
} catch ( err ) {
for ( var i =0; i < storage.length ; i++ ) {
console.log ( storage.key( i ) )
}
}