2012-01-31 9 views
20

私は、iPhoneアプリケーションのためのHTML5(のlocalStorage)で利用できるクライアント側のストレージを使用しようとしている、と私は(現在は5メガバイトである)のlocalStorageのために関連した「QUOTA」の完全に承知しています。のiPhoneのlocalStorage「QUOTA_EXCEEDED_ERR」問題

問題は私のアプリケーション(以前にデータが保存されていない状態)です。

は誰シェア (〜4Kbのは、正確には(通常のブラウザでChromeウェブインスペクタを使用しています))全体のデータのサイズが5メガバイトより道少ないもののQUOTA_EXCEEDED_ERRが生じているのlocalStorageにデータを格納することができます しようどのようにデータが時に問題がだけiPhoneのためにも、すべてのブラウザと発生していることと同じ5メガバイト

注上限4KbのはQUOTA_EXCEEDED_ERRが得られている重量を量ることをこの上でいくつかの光iPhone Simulator QUOTA_EXCEEDED_ERRエラーメッセージが表示されません

iPhoneは現在iPhone4です。

+0

詳細な調査の結果、上記のエラーはiPhone 3Sでは再現されませんでした。 iPhone 4のiOSに問題があるようです。しかし、私を殺しているものは、これを信じていないのですが、GoogleがlocalStorageをgmail whickのために使っているので上記のようにiPhone 4がうまく動くので、iPhone 4のiOSに問題があるとGmailのlocalStorageがどうなるのでしょうか。誰でもこのことを分かち合うことができますか? – Viren

+0

上記のエラーの原因となるコードを貼り付け – Viren

+2

下記の私の答えをチェックしてください。電話がプライベートブラウジングを有効にしているか、ローカルストレージに間違った設定を使用している可能性があります – JoeCortopassi

答えて

27

[設定] - > [Safari]に移動し、プライベートブラウズが有効になっているかどうかを確認します。そうであれば、ローカルストレージは何も格納することができません。ここではあなたのためのローカルストレージをチェックするためのいくつかの基本的なコードがあります:

また
if (!!window.localStorage) 
{ 
    localStorage.setItem(key, val); 
}; 

、どのようにそれを設定していますか? localStorage.setItem(key, val)を使用しているか、localStorage(key, val)を試していますか?あなたはそれが間違って設定することから来ている可能性があります

+2

、はい、問題は正解でしたが、iPhoneでのプラ​​イベートブラウジングは無効になっていますが、正常に機能しましたが、プライベートブラウジングを有効にしたエミュレータで同じ作業をする理由どのようにローカルストレージがiPhone上でGmailのために働いているのかについては、プライベートブラウジングが有効になっていても、どんな方法でも助けてくれてありがとうございました – Viren

+1

うわー、この回答がありがたいです。 –

+0

ありがとう!! .... :) –

3

は、新しいものを設定する前に値を削除してみてください:それは似ていますよう

localStorage.removeItem(key); 
localStorage.setItem(key, val); 

は、this questionも参照してください。

+0

いいえ、その作業は – Viren

+0

以外は解決策と参考のために – Viren

+0

+1とは別の解決方法があります。私のために働いた。 –

3

ローカルストレージクォータは、データストレージを使用する他のページがある場合は、ドメインに関連付けられます。例外が発生したときに、キーを繰り返してストレージ内の内容を調べます。

try { 
    // try to insert storage here 
} catch (err) { 
    for (var i =0; i < storage.length ; i++) { 
     console.log (storage.key(i)) 
    } 
} 
+0

@Temmu、空のlocalStorage(これは初めてのようなもの)に単純なキー値のペアを格納しようとするのは現実的ではないlocalStorage.setItem( "error"、 "QUOTA_EXCEEDED_ERR")上記のエラーは確かに格納された値が遠い5MB未満、さらには4KB未満 – Viren

+0

私は、あなたのアプリと同じドメインから提供されている他のページやWebアプリケーションがある可能性があります。 –

+0

@Temmu、localstorageが実装されているアプリケーションのページのみ – Viren

19

私は同じ問題があり、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; 
    } 
} 
8

事実はiOSの< 6用のSafariでのプライベートブラウジングモードを使用してwindow.localStorage及び012を空にしないことですであるため、!!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を信頼する必要がありますが、非常に慎重に。