JavaScript可以访问文件系统?

我很确定答案是否定的 ,因此谷歌齿轮,Adobe AIR等

如果我是对的,那么http://tiddlywiki.com如何工作? 它是持久的,用JavaScript编写的。 它也只是一个没有外部(serverside)依赖关系的HTML文件。 WTF? 在哪里/如何存储其状态?

Tiddlywiki有几种保存数据的方法,具体取决于使用哪种浏览器。 正如你在源文件中看到的那样 。

  • 如果启用了ActiveX,则使用Scripting.FileSystemObject。
  • 在基于Gecko的浏览器上,它试图使用UniversalXPConnect。
  • 如果启用Java,则使用TiddlySaver Java小程序。
  • 如果启用Java LiveConnect ,则会尝试使用Java的文件类。

HTML5的File [ 1 ],FileWriter [ 2 ]和FileSystem [ 3 ] API可在Google Chrome的最新开发者频道中find。 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存储幻灯片 ,了解更多代码片段。

它使用一个像这样的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; } } 

技术上你可以做到

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

在兼容netscape的浏览器(Firefox,Mozilla,Netscape)中,它会询问用户是否允许文件系统访问,但这不是可移植的。

*每个浏览器进程一次

JavaScript可以访问文件系统?

据我所知,不在上面提到的沙箱区域之外。 但是,它可以访问一个签名的java applet,它具有可调用的公用方法,可以访问所有文件。 我已经做到了,它工作正常,是跨浏览器。

签名部分有些涉及和专业使用,您可能需要支付授权您的身份的代码签名证书。 从Verisign这样的地方得到它。 这样用户至less知道谁写的applet(如果有帮助的话)。 您可以自由地签名,但其中一个“可能的安全风险”popup窗口将首先用于用户的授权。

你会认为这样的文件写入小程序已经存在下载,但我找不到任何通过search。 如果他们这样做,你可以把它插在你的页面,学习API,然后离开你。

答案确实没有。 如果需要的话,通常会使用Java小程序和可怕的ActiveX插件