2012-05-28 14 views
7

मैं क्रोम एक्सटेंशन पर काम कर रहा हूं जिसमें कुछ जानकारी (टैब जानकारी मुख्य रूप से) को सहेजने की ज़रूरत है जो विस्तार के पूरे जीवनकाल में मौजूद रहेगी (उदाहरण के लिए, जब तक उपयोगकर्ता ब्राउज़र बंद नहीं कर लेता है)।क्रोम एक्सटेंशन सेविंग डेटा

एक विकल्प स्थानीय स्टोरेज का उपयोग करना है, हालांकि स्थानीय स्टोरेज केवल स्ट्रिंग्स को बचा सकता है और यह मेरे लिए बहुत असहज बनाता है (क्योंकि मेरे पास सहेजने के लिए डेटा का एक गुच्छा है - तिथियां, यूआरएल, पूर्णांक इत्यादि)। जो मैं खोज रहा हूं वह मेरी अपनी जावास्क्रिप्ट ऑब्जेक्ट्स का उपयोग कर रहा है जो विस्तार के दौरान पूरे समय लाइव रहेंगे।
अब समस्या यह है कि कुछ जावास्क्रिप्ट फ़ाइलों में इन ऑब्जेक्ट्स को किसी स्क्रिप्ट में परिभाषित करने से उपयोगकर्ता उन्हें ब्राउज़र क्रिया पर क्लिक करने पर हर बार मिटा देगा। दूसरे शब्दों में, मेरे पास popup.html नामक ब्राउज़र क्रिया है जिसमें जावास्क्रिप्ट फ़ाइल शामिल है (जिसमें मैं अपनी ऑब्जेक्ट्स को सहेजना चाहता हूं) और जब भी उपयोगकर्ता ब्राउज़र क्रिया पर क्लिक करता है तो जेएस फ़ाइल में परिभाषित सभी ऑब्जेक्ट्स खो जाते हैं, फिर भी मैं सब कुछ जारी रखना चाहता हूँ।

ब्राउज़र डेटा पर कई क्लिकों के माध्यम से डेटा रखने के लिए मुझे कौन सा विकल्प रखना है और यह स्थानीय स्टोरेज नहीं है?

+1

तो, क्या आप वर्तमान सत्र के लिए डेटा याद रखना चाहते हैं (ब्राउज़र बंद होने तक)? उस स्थिति में, बस [पृष्ठभूमि पृष्ठ] (https://code.google.com/chrome/extensions/background_pages.html) में ऑब्जेक्ट बनाएं। –

+0

या आप [indexedDB] का उपयोग कर सकते हैं (https://developer.mozilla.org/en/IndexedDB/Using_IndexedDB) – gengkev

+0

इन दिनों आप chrome.storage का उपयोग कर सकते हैं जो स्वचालित रूप से FWIW को क्रमबद्ध/deserialize करता है: http://stackoverflow.com/ ए/24281357/32453 – rogerdpack

उत्तर

2

आपको वास्तव में स्थानीय स्टोरेज का उपयोग करना चाहिए (आप JSON.stringify और JSON.parse का उपयोग कर सकते हैं)।

तुम सच में localStorage है और न ही एक सर्वर साइड भंडारण का उपयोग नहीं करना चाहते हैं, IndexedDB का उपयोग करें: https://developer.mozilla.org/en/IndexedDB/Using_IndexedDB

+0

यदि कोई अन्य विकल्प नहीं है तो मैं स्थानीय स्टोरेज पर वापस आऊंगा। क्या आपको पता है कि मेरी समस्या को हल करने के लिए पृष्ठभूमि पृष्ठ का उपयोग किया जा सकता है? मैं पूरी तरह से समझ नहीं पा रहा हूं कि वे मैनुअल से क्या करते हैं ... –

+0

आप पृष्ठभूमि पृष्ठ का उपयोग कर सकते हैं, लेकिन इसकी शायद आवश्यकता नहीं है। आपके एक्सटेंशन की कोई भी स्क्रिप्ट स्थानीय स्टोरेज से/पढ़ और लिख सकती है। –

2

Filesystem API की स्थायी भंडारण का उपयोग करें। यह localStorage से अधिक विश्वसनीय है। उपयोगकर्ता द्वारा कैश, कुकीज़ इत्यादि को साफ़ करने के बाद localStorage साफ़ कर दिया जाएगा। फाइल सिस्टम अधिक विश्वसनीय है।

+2

उपयोगकर्ता डेटा को जारी रखने का अच्छा विचार क्यों है, भले ही उपयोगकर्ता स्पष्ट रूप से कुकीज को हटा देता है आदि? क्या आप एक उपयोगकर्ता के रूप में उस व्यवहार चाहते हैं? यह विशेष रूप से अजीब बात है कि @ जोएलब्लम कुछ ऐसा मांग रहा है जो उपयोगकर्ता के सत्र के दौरान ही जारी रहे। – steinar

+0

दुर्भाग्य से ऐसा लगता है कि फ़ाइल सिस्टम सिस्टम को क्रोम की तुलना में अन्य ब्राउज़रों द्वारा अपनाया नहीं गया था और मूल रूप से स्थानीय स्टोरेज द्वारा "प्रतिस्थापित" किया गया था – rogerdpack

0

क्रोम.स्टॉरेज का उपयोग करने के बारे में यह उत्तर दूसरों के मुकाबले कहीं बेहतर है।

https://stackoverflow.com/a/14009240/766115

यह localStorage तरह है, लेकिन पॉपअप/पृष्ठभूमि और सामग्री स्क्रिप्ट के बीच काम करता है।

संबंधित मुद्दे