2009-07-06 136 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并关闭您。

相关问题