2011-11-10 14 views
5

मैं ग्राहक पर एक फाइल करने के लिए एक JSON ऑब्जेक्ट सहेजना चाहते भविष्य के उपयोग के लिए यह लागू करने के लिए, मैं लाइनजावास्क्रिप्ट का उपयोग कर क्लाइंट साइड पर एक फाइल को कैसे सेव करें?

निम्नलिखित window.open("data:text/json;charset=utf-8," + escape(JSON.stringify(obj)));

की कोशिश की है और यह काम करता !! समस्या यह उपयोगकर्ता को सहेजने के लिए फ़ाइल का स्थान और नाम पूछती है। मैं क्या चाहता हूं कि मैं चाहता हूं कि उपयोगकर्ता पूरी तरह से इस तथ्य से अनजान है कि भविष्य में उपयोग के लिए कुछ बचाया जा रहा है या कम से कम इसे न्यूनतम संभव उपयोगकर्ता क्लिक पर रखें।

मैं फ़ाइल नाम और स्थानwindow.open() में कैसे दे सकता हूं?

अग्रिम धन्यवाद,

संपादित

बस यह स्पष्ट है कि बनाने के लिए "मैं मनमाने ढंग से या अवांछित डाटा स्टोर नहीं है। सभी उपयोगकर्ताओं को पंजीकृत सिस्टम के उपयोगकर्ताओं रहे हैं।" सामान्य परिस्थितियों में मैं स्थानीय रूप से कुछ भी स्टोर नहीं करता हूं। हालांकि मैं कुछ जेएसओएन ऑब्जेक्ट्स स्टोर करना चाहता हूं अगर नेटवर्क फॉर्म जमा करने के समय उपलब्ध नहीं था।

कुकीज़ का उपयोग करने के लिए एक स्पष्ट समाधान होगा। चूंकि कुकीज को उपयोगकर्ता की ब्राउज़र सेटिंग्स के कारण गलती से हटाया जा सकता है। नेटवर्क उपलब्ध होने तक मुझे डेटा को जारी रखने का एक तरीका चाहिए। क्रॉस ब्राउज़र समर्थन होने के लिए यह अधिक होगा।

+4

जावा जावास्क्रिप्ट नहीं है। वे पूरी तरह अलग भाषाएं हैं। – Pointy

+0

इसके अलावा, आप ब्राउज़र वातावरण से क्लाइंट मशीनों पर फ़ाइलों को सहेजने के लिए मजबूर नहीं कर सकते हैं। यह एक काफी स्पष्ट सुरक्षा उपाय है। – Pointy

+0

@ कैपप मैं क्रॉस ब्राउज़र समर्थन के लिए मान चाहता हूं, भले ही उपयोगकर्ता ब्राउजर को बदलता है, जहां से वह आगे बढ़ने में सक्षम होना चाहिए। मैं JSON ऑब्जेक्ट्स में जानकारी संग्रहीत कर रहा हूं। – aProgrammer

उत्तर

2

मैं पार ब्राउज़र समर्थन के लिए मान चाहते हैं मदद करता है, उपयोगकर्ता ब्राउज़र वह/वह वह जहां बाएं से आगे बढ़ने के लिए सक्षम होना चाहिए बदल जाता है, भले ही। मैं JSON ऑब्जेक्ट्स में जानकारी संग्रहीत कर रहा हूं।

मुझे लगता है कि उपयोगकर्ता एक वेब एप्लिकेशन को उसी मशीन पर अन्य ब्राउज़रों के साथ जानकारी साझा करने की अपेक्षा नहीं करते हैं। साथ ही, मुझे संदेह है कि कई उपयोगकर्ता इस तरह की गोपनीयता-आक्रामक सुविधा को वारंट करने के लिए वैसे भी अपने ब्राउज़र को अक्सर बदलते हैं। आपको या तो अपने सर्वर पर जानकारी संग्रहीत करने पर विचार करना चाहिए (किसी उपयोगकर्ता को ओपनआईडी, Google, फेसबुक इत्यादि जैसे सामान्य खातों को पंजीकृत करने या उपयोग करने के लिए मजबूर करना) या कुकी सेट करके या उल्लिखित स्टोरेज तकनीकों का उपयोग करके क्लाइंट पक्ष पर।

यदि आप वास्तव में संग्रहीत जानकारी को उसी मशीन पर ब्राउज़रों तक सीमित करना चाहते हैं, और अलग-अलग मशीनों पर उसी उपयोगकर्ता द्वारा एक्सेस की अनुमति नहीं देना चाहते हैं, तो आप LSO ('फ़्लैश कुकीज़') पर एक नज़र डाल सकते हैं जो प्रतीत होता है ब्राउज़र को स्वतंत्र रूप से सहेजने के लिए। एलएसओ को स्टोर करने के लिए आपको किसी भी उपयोगकर्ता की पुष्टि की आवश्यकता नहीं है।

अपडेट: फ्लैश ब्राउज़र द्वारा समर्थित नहीं है क्योंकि यह आजकल व्यापक रूप से उपयोग किया जाता है और नहीं, इसलिए एलएसओ अब एक अच्छा विकल्प नहीं है। http://www.html5rocks.com/en/tutorials/file/filesystem/

हालांकि मैं LocalStorage के साथ जाना होगा:

+0

उपयोगकर्ता पहले से ही एक होंगे मेरी साइट का पंजीकृत उपयोगकर्ता ... और मैं केवल तभी डेटा स्टोर करता हूं जब अस्थायी रूप से कोई नेटवर्क उपलब्ध न हो .. अन्य सभी मामलों के लिए (यानी जब नेटवर्क उपलब्ध हो) मैं कुछ भी स्टोर नहीं करता .... वैसे भी धन्यवाद .. – aProgrammer

7

यदि आप डेटा जारी रखना चाहते हैं, तो a storage API का उपयोग करें, आप उपयोगकर्ता के फाइल सिस्टम के साथ गेम नहीं खेल सकते हैं।

+1

+1, [store.js] (https://github.com/marcuswestin/store.js) - एक स्थानीय स्टोरेज रैपर भी आज़माएं। – Daniel

4

आप ऐसा नहीं कर सकते हैं, यह ग्राहक पक्ष पर सुरक्षा का सवाल है।

1

जैसा कि टिप्पणियों में पहले से ही उल्लेख किया गया है, स्पष्ट सुरक्षा कारणों से स्पष्ट उपयोगकर्ता सहमति के बिना यह संभव नहीं है। हालांकि, टिप्पणियों में भी उल्लेख किया गया है, आप एक कुकी में जानकारी को shoudl/स्टोर कर सकते हैं जो उपयोगकर्ता लौटने पर पुनर्प्राप्त करने योग्य होगा।

कुछ इस तरह यह

document.cookie="cookie_name="+required_value+"; expires=Monday, 04-Dec-2011 05:00:00 GMT"; 

स्पष्ट रूप से समय समाप्त हो रहा है जब तक आप की जानकारी को बनाए करने की आवश्यकता के रूप में हो जाएगा करना होगा।

आशा व्यक्त की कि

+0

मेरे पास कुकी में मूल्य है .. असल में यह वह कुकी है जिसे मैं लिख रहा हूं (या लिखने की कोशिश कर रहा हूं) उस मामले के लिए जहां उपयोगकर्ता अगली बार ब्राउज़र बदलता है या कुकीज़ साफ़ करता है ... – aProgrammer

2

फ़ाइल सिस्टम API एचटीएमएल 5 कल्पना की हिस्सा है और यह आधुनिक ब्राउज़रों में एक निश्चित वेबसाइट के लिए एक खिलौने के डिब्बे में फाइल सिस्टम का उपयोग करने के लिए संभव है, यहाँ एक अच्छा ट्यूटोरियल है उस बात के जो बेहतर ब्राउज़र समर्थन हासिल है के लिए एपीआई: http://www.w3schools.com/html5/html5_webstorage.asp

+0

" फ़ाइल सिस्टम एपीआई जिस पर इस परियोजना पर आधारित है, को हटा दिया गया है, और अब अधिकांश प्रमुख ब्राउज़रों द्वारा समर्थित नहीं है। यह संग्रह केवल अभिलेखीय उद्देश्यों के लिए मौजूद है। " https://github.com/keithwhor/FSO.js/ –

2

FSO.js अस्थायी/लगातार FileSystem API लपेटता है और आप आसानी से पढ़ने के लिए/फ़ाइलें ... केवल क्रोम द्वारा समर्थित अभी लिखने की अनुमति होगी, लेकिन कल्पना के साथ आ रहा है तेजी से। :)

+0

"इस प्रोजेक्ट पर आधारित फ़ाइल सिस्टम एपीआई को बहिष्कृत कर दिया गया है, और अब अधिकांश प्रमुख ब्राउज़रों द्वारा समर्थित नहीं है। यह संग्रह केवल अभिलेखीय उद्देश्यों के लिए मौजूद है।" https://github.com/keithwhor/FSO.js/ –

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