2012-01-31 11 views
20

मैं iPhone के लिए एचटीएमएल 5 (localStorage) में क्लाइंट साइड संग्रहण उपलब्ध का उपयोग करने की कोशिश कर रहा है, और मैं "कोटा" localStorage के लिए जुड़े (जो वर्तमान में 5MB है) का पूरी तरह से अवगत हूँ ।Iphone localStorage "QUOTA_EXCEEDED_ERR" मुद्दा

अब समस्या मेरे आवेदन के लिए है (पहले से संग्रहीत कोई डेटा नहीं)। स्टोर करने के लिए localStorage में डेटा QUOTA_EXCEEDED_ERR में जिसके परिणामस्वरूप है, हालांकि समग्र डेटा के आकार जिस तरह से 5 से कम एमबी है की कोशिश कर रहा

कर सकते हैं किसी को भी शेयर (~ 4KB सटीक होना करने के लिए (सामान्य ब्राउज़र में क्रोम वेब निरीक्षक) का उपयोग कर पाया) इस पर कुछ प्रकाश कैसे एक डेटा वजन 4KB QUOTA_EXCEEDED_ERR में जिसके परिणामस्वरूप है कि जब के लिए एक ही 5MB

नोट ऊपरी सीमा कि इस मुद्दे को केवल iPhone, के लिए होने वाली सभी ब्राउज़रों और यहां तक ​​कि है आईफोन सिम्युलेटर QUOTA_EXCEEDED_ERR त्रुटि

आईफोन वर्तमान में तस्वीर आईफोन 4 है।

+0

फ़ुरथर जांच के परिणामस्वरूप उपरोक्त त्रुटि आईफोन 3 एस में दोहराना नहीं है। तो ऐसा लगता है कि आईफोन 4 के आईओएस के साथ एक समस्या है। लेकिन मुझे विश्वास करने में कुछ ऐसा नहीं है क्योंकि Google जीमेल के लिए स्थानीय स्टोरेज का उपयोग करता है, उपरोक्त उल्लेख आईफोन 4 में ठीक काम करता है, इसलिए यदि आईफोन 4 के आईओएस के साथ कोई समस्या है तो स्थानीय स्टोरेज जीमेल के लिए कैसे काम करता है। क्या कोई इस पर प्रकाश साझा कर सकता है। – Viren

+0

उपरोक्त त्रुटि – Viren

+2

उत्पन्न करने वाले कोड को चिपकाकर नीचे मेरा उत्तर देखें। ऐसा लगता है कि या तो आपके पास फोन पर निजी ब्राउज़िंग सक्षम है, या आप स्थानीय स्टोरेज – JoeCortopassi

उत्तर

27
में सेटिंग्स> सफारी

जाओ और यदि निजी ब्राउज़िंग है देखने के लिए जाँच। यदि ऐसा है, तो स्थानीय भंडारण कुछ भी स्टोर करने में सक्षम नहीं होगा। आपके लिए स्थानीय भंडारण की जांच करने के लिए यहां कुछ बुनियादी कोड दिए गए हैं:

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

इसके अलावा, आप इसे कैसे सेट कर रहे हैं? क्या आप localStorage.setItem(key, val) का उपयोग कर रहे हैं, या localStorage(key, val) का प्रयास कर रहे हैं? आप समस्या को गलत तरीके से सेट करने से आ रहे हैं

+2

, हां, यह सही है कि यह सही था कि आईफोन में निजी ब्राउज़िंग सक्षम है, यह ठीक काम करता है लेकिन यह कुछ प्रकाश साझा कर सकता है कि निजी ब्राउज़िंग के साथ एम्यूलेटर में एक ही काम क्यों सक्षम है और आईफोन पर जीमेल के लिए स्थानीय स्टोरेज कैसे काम करता है, भले ही "सक्षम" में निजी ब्राउज़िंग, किसी भी तरह से, लेकिन उत्तर – 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.setItem ("त्रुटि", "QUOTA_EXCEEDED_ERR") परिणामस्वरूप उपर्युक्त त्रुटि निश्चित रूप से संग्रहीत मूल्य दूर है 5 एमबी से कम और यहां तक ​​कि 4 केबी – Viren

+0

मेरा मतलब है कि यह संभव है कि आपके ऐप की तुलना में एक ही डोमेन से कुछ अन्य पेज या वेबपैप परोस दिया गया हो और वह अन्य ऐप जो स्टोरेज भर रहा हो। –

+0

@Temmu, उस एप्लिकेशन में वह पृष्ठ जहां स्थानीय स्टोरेज लागू किया गया है – Viren

19

मेरे पास एक ही समस्या थी और जोकोर्तोपासी केवल आंशिक रूप से सही है: यह निजी ब्राउज़िंग सक्षम होने के कारण होता है। उस उत्तर में प्रदान किया गया कोड हालांकि बहुत मदद नहीं करता है।जब मैं iPad सफारी (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

तथ्य यह है कि आईओएस < 6 के लिए सफारी पर निजी ब्राउज़िंग मोड का उपयोग कर खाली नहीं करता है window.localStorage और window.sessionStorage और इसलिए !!window.localStorage या !!window.sessionStorage की जांच पर्याप्त नहीं होगी, और जो भी आप उन घटकों से कॉल करते हैं, वे इस QUOTA_EXCEEDED_ERR त्रुटि को फेंकने में असफल हो जाएंगे।

उन प्लेटफ़ॉर्म पर, निजी मोड कोटा को शून्य पर सेट करना प्रतीत होता है। यही कारण है कि, वास्तव में उन सुविधाओं का परीक्षण करने के लिए, वैसे ही Modernizr करता है, आपको इसे एक कोशिश के अंदर लपेटना होगा ... पकड़ो कथन।

Modernizr कोड:

var mod = 'modernizr'; 
/*...*/ 
tests['localstorage'] = function() { 
    try { 
     localStorage.setItem(mod, mod); 
     localStorage.removeItem(mod); 
     return true; 
    } catch(e) { 
     return false; 
    } 
}; 

हम वेब एपीआई पर भरोसा करने के लिए है, लेकिन काफी ध्यान से।