2009-07-06 16 views
36

मैं यकीन है कि इस सवाल का जवाब नहीं था, और इसलिए गियर गूगल, एडोब आकाशवाणी, आदिजावास्क्रिप्ट एक फाइल सिस्टम का उपयोग कर सकते हैं?

अगर मैं सही था, तो कैसे http://tiddlywiki.com काम करता है? यह जावास्क्रिप्ट में लगातार और लिखा है। यह केवल एक ही HTML फ़ाइल है जिसमें बाहरी (सर्वरसाइड) निर्भरता नहीं है। WTF? यह कहां/कैसे अपने राज्य को स्टोर करता है?

+0

http://www.html5rocks.com/en/tutorials/file/filesystem/ – Pacerier

उत्तर

45

Tiddlywiki में ब्राउज़र को उपयोग करने के आधार पर डेटा सहेजने के कई तरीके हैं। As you could see in the source

  • यदि ActiveX सक्षम है, तो यह Scripting.FileSystemObject का उपयोग करता है।
  • गीको-आधारित ब्राउज़र पर, यह UniversalXPConnect का उपयोग करने का प्रयास करता है।
  • यदि जावा सक्षम है, तो यह TiddlySaver Java Applet का उपयोग करता है।
  • यदि Java LiveConnect सक्षम है, तो यह जावा की फ़ाइल कक्षाओं का उपयोग करने का प्रयास करता है।
+0

यह अच्छा होगा अगर उत्तर में जिथब कोडबेस में वास्तविक कोड के पॉइंटर शामिल हों। – GabrielC

12

यह इस तरह एक जावा फ़ाइल संदर्भ का उपयोग करता है:

drivers.tiddlySaver = { 
     name: "tiddlySaver", 
     deferredInit: function() { 
      if(!document.applets["TiddlySaver"] && !$.browser.mozilla && !$.browser.msie && document.location.toString().substr(0,5) == "file:") { 
       $(document.body).append("<applet style='position:absolute;left:-1px' name='TiddlySaver' code='TiddlySaver.class' archive='TiddlySaver.jar' width='1'height='1'></applet>"); 
      } 
     }, 
     isAvailable: function() { 
      return !!document.applets["TiddlySaver"]; 
     }, 
     loadFile: function(filePath) { 
      var r; 
      try { 
       if(document.applets["TiddlySaver"]) { 
        r = document.applets["TiddlySaver"].loadFile(javaUrlToFilename(filePath),"UTF-8"); 
        return (r === undefined || r === null) ? null : String(r); 
       } 
      } catch(ex) { 
      } 
      return null; 
     }, 
     saveFile: function(filePath,content) { 
      try { 
       if(document.applets["TiddlySaver"]) 
        return document.applets["TiddlySaver"].saveFile(javaUrlToFilename(filePath),"UTF-8",content); 
      } catch(ex) { 
      } 
      return null; 
     } 
    } 
2

जवाब वास्तव में है नहीं। जावा एप्लेट, और खतरनाक ActiveX प्लगइन्स आमतौर पर उपयोग किया जाता है अगर यह

4

तकनीकी तौर पर की आवश्यकता है आप एक नेटस्केप संगत ब्राउज़र (फ़ायरफ़ॉक्स, मोज़िला, नेटस्केप) में

netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserWrite'); 

कर सकते हैं, और यह उपयोगकर्ता पूछेंगे * फाइल सिस्टम एक्सेस की अनुमति देना है या नहीं, लेकिन यह पोर्टेबल नहीं है।

* एक बार ब्राउज़र प्रक्रिया प्रति

35

एचटीएमएल 5 के फ़ाइल [1], FileWriter [2], और FileSystem [3] एपीआई Google Chrome के नए डेवलपर चैनल में उपलब्ध हैं। फ़ाइलसिस्टम एपीआई आपको ब्राउज़र के बारे में जानता है उस स्थान के भीतर एक सैंडबॉक्स फाइल सिस्टम को पढ़ने/लिखने देता है। उदाहरण के लिए, आप उपयोगकर्ता के स्थानीय एफएस पर 'माई पिक्चर्स' फ़ोल्डर खोल सकते हैं और उस पर पढ़/लिख सकते हैं। यह काम में कुछ है, लेकिन यह थोड़ी देर के लिए तैयार नहीं होगा। एक फाइल लिखने के उदाहरण:

window.requestFileSystem(
    TEMPORARY,  // persistent vs. temporary storage 
    1024 * 1024,  // 1MB. Size (bytes) of needed space 
    initFs,   // success callback 
    opt_errorHandler // opt. error callback, denial of access 
); 

function initFs(fs) { 
    fs.root.getFile('logFile.txt', {create: true}, function(fileEntry) { 

    fileEntry.createWriter(function(writer) { // FileWriter 

     writer.onwrite = function(e) { 
     console.log('Write completed.'); 
     }; 

     writer.onerror = function(e) { 
     console.log('Write failed: ' + e.toString()); 
     }; 

     var bb = new BlobBuilder(); 
     bb.append('Lorem ipsum'); 
     writer.write(bb.getBlob('text/plain')); 

    }, errorHandler); 
    } 
} 

चेक बाहर अधिक कोड के टुकड़े के लिए इस HTML5 Storage slide deck

3

जावास्क्रिप्ट एक फाइल सिस्टम का उपयोग कर सकते हैं?

ऊपर वर्णित सैंडबॉक्स क्षेत्र के बाहर नहीं, मेरे सर्वोत्तम ज्ञान के लिए। हालांकि, यह एक हस्ताक्षरित जावा ऐपलेट तक पहुंच सकता है जिसमें कॉल करने योग्य सार्वजनिक विधियां हैं जो सभी फ़ाइलों को प्राप्त कर सकती हैं। मैंने इसे किया है और यह ठीक काम करता है और क्रॉस ब्राउज़र है।

पर हस्ताक्षर हिस्सा कुछ हद तक शामिल है और व्यावसायिक उपयोग के लिए यदि आप एक कोड हस्ताक्षर प्रमाण पत्र जो अपनी पहचान अधिकृत करता है के लिए भुगतान करने की आवश्यकता हो सकती है। इसे Verisign जैसे किसी स्थान से प्राप्त करें। इस तरह उपयोगकर्ताओं को कम से कम पता है कि एप्लेट किसने लिखा है (अगर इससे मदद मिलती है)। आप इसे अपने आप मुफ्त में साइन कर सकते हैं लेकिन उपयोगकर्ता द्वारा प्राधिकरण के लिए पहले उपयोग पर उन "संभावित सुरक्षा जोखिम" पॉपअप में से एक होगा।

आपको लगता है कि फ़ाइल लेखन के लिए ऐसे हस्ताक्षरित एप्लेट पहले से ही डाउनलोड के लिए मौजूद होंगे लेकिन मुझे खोज के माध्यम से कोई भी नहीं मिला। अगर उन्होंने किया, तो आप इसे अपने पेज में प्लग कर सकते हैं, एपीआई सीख सकते हैं और आप जा सकते हैं।

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