2009-07-06 133 views
36

我敢肯定的答案是NO ,因此谷歌齒輪,ADOBE AIR等JavaScript可以訪問文件系統嗎?

如果我是正確的,那麼如何做http://tiddlywiki.com工作?它是持久性的,並用JavaScript編寫。它也只是一個沒有外部(serverside)依賴關係的HTML文件。 WTF?它在哪裏/如何存儲它的狀態?

+0

http://www.html5rocks.com/en/tutorials/file/filesystem/ – Pacerier 2014-05-01 20:41:20

回答

45

Tiddlywiki有幾種保存數據的方法,具體取決於使用哪種瀏覽器。 As you could see in the source

  • 如果啓用了ActiveX,它將使用Scripting.FileSystemObject。
  • 在基於Gecko的瀏覽器上,它嘗試使用UniversalXPConnect。
  • 如果啓用了Java,它將使用TiddlySaver Java小程序。
  • 如果啓用了Java LiveConnect,它會嘗試使用Java的文件類。
+0

如果答案包含指向github代碼庫中實際代碼的指針,那將會很好。 – GabrielC 2014-07-14 13:58:02

12

它使用這樣一個java文件引用:

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

答案是確實NO。 Java小程序,和可怕的ActiveX插件通常使用,如果這是必需的

4

從技術上講,你可以在兼容Netscape的瀏覽器(Firefox,Mozilla的,Netscape)的做

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

,它會詢問用戶*是否允許文件系統訪問,但這不是可移植的。

*每個瀏覽器進程一旦

35

HTML5的文件[1],FileWriter的[2]和文件系統[3] API是谷歌瀏覽器的最新的開發者提供通道。 FileSystem API允許您在瀏覽器知道的空間內讀/寫沙盒文件系統。例如,您不能在用戶的本地FS上打開「我的圖片」文件夾並對其進行讀取/寫入。這是作品中的一些東西,但它暫時還沒有準備好。寫文件的例子:

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

JavaScript可以訪問文件系統嗎?

不是上述沙箱區域之外,據我所知。但是,它可以訪問具有可調用公用方法的可簽名的java applet,該公用方法可以訪問所有文件。我已經做到了,它工作正常,並且是跨瀏覽器。

簽名部分有些涉及和專業用途,您可能需要支付授權您的身份的代碼簽名證書。從Verisign等地方獲取。這樣用戶至少知道applet是由誰寫的(如果有幫助的話)。您可以自己免費簽名,但其中一個「可能的安全風險」彈出窗口將在首次使用時發生,以供用戶授權。

你可能會認爲這種已簽名的文件寫入小程序已經存在下載,但我找不到任何通過搜索。如果他們這樣做了,您可以將其插入到您的頁面中,學習API並關閉您。

相關問題