如何在Mozilla Firefox中使用javascript创建文件

时间:2010-06-18 07:10:08

标签: javascript firefox file operation

我想在javascript中编写一个函数来创建一个文件并写一些内容给我,我和firefox合作,在这种情况下有人可以帮助我吗。

...谢谢

8 个答案:

答案 0 :(得分:4)

您可以在Firefox中使用JavaScript编写文件,但必须使用XPCOM对象(内部浏览器API)。对于从网页加载的JavaScript,这是不允许的,并且它旨在由在Firefox附加组件中运行的JavaScript(具有高级别权限)使用。

有一种方法可以让非特权(网页)JavaScript请求更多权限,如果用户授予它(会有一个弹出对话框要求权限),网页代码就能写入文件。

但在你进一步阅读之前,警告:

这不是标准的JavaScript,除非您正在开发一个非常具体的应用程序,否则我不建议使用此方法,该应用程序将以非常特定的方式使用(例如,http://www.tiddlywiki.com/客户端JavaScript-HTML只有维基)。

在网站上申请XPCOM权限是一种不好的做法!它基本上等同于运行您刚从站点下载的.exe。您要求用户使用运行Firefox的用户的身份授予对其计算机的完全访问权限(读取,写入,执行)。

请求使用XPCOM的权限(这将提示用户进行确认,无法避免):

netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

然后,使用XPCOM对象(Mozilla Developer Network的示例代码)写入文件:

   1. // file is nsIFile, data is a string  
   2. var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].  
   3.                          createInstance(Components.interfaces.nsIFileOutputStream);  
   4.   
   5. // use 0x02 | 0x10 to open file for appending.  
   6. foStream.init(file, 0x02 | 0x08 | 0x20, 0666, 0);   
   7. // write, create, truncate  
   8. // In a c file operation, we have no need to set file mode with or operation,  
   9. // directly using "r" or "w" usually.  
  10.   
  11. // if you are sure there will never ever be any non-ascii text in data you can   
  12. // also call foStream.writeData directly  
  13. var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].  
  14.                           createInstance(Components.interfaces.nsIConverterOutputStream);  
  15. converter.init(foStream, "UTF-8", 0, 0);  
  16. converter.writeString(data);  
  17. converter.close(); // this closes foStream  

您可以在此处使用XPCOM在Firefox中找到有关I / O的更多信息:https://developer.mozilla.org/en-US/docs/Code_snippets/File_I_O

答案 1 :(得分:3)

来自网站的Javascript无法访问本地文件系统。

如果您想存储数据,请将其存储在服务器上或cookie中。

答案 2 :(得分:2)

出于安全原因,禁止直接从浏览器写入文件系统。但是使用html5,可以获得离线存储支持。 Take a look here

Grz,Kris。

答案 3 :(得分:1)

Javascript在客户端上下文中执行。

http://www.tek-tips.com/viewthread.cfm?qid=1171273&page=1

答案 4 :(得分:1)

这个..文件编写器API将有一个API。早期规范在这里: http://www.w3.org/TR/file-writer-api/ 它尚未在任何浏览器中实现。

更新:似乎已经存在一个实现。查看http://caniuse.com/filesystemhttp://www.html5rocks.com/en/tutorials/file/filesystem/

答案 5 :(得分:0)

虽然每个回复javascript都没有能力在远程服务器上编写文件的人都是正确的,出于安全考虑,这是正确的,你想要完成的工作仍然可能。

例如,如果您希望使用javascript在网站上创建文件,则可以使用某种服务器端脚本语言和AJAX调用来实现。

示例:

您的服务器上有一个名为update_last_access.php的文件,该文件将创建一个文件,用于存储上次在某个任意文件中访问文件的时间。

如果你有你的javascript函数对该脚本进行AJAX调用,例如,在jquery中

$.get("update_last_access.php")

然后执行服务器端脚本并写入文件。

在为您提供更多帮助之前,您必须澄清您正在尝试做的事情。

答案 6 :(得分:0)

您可以使用Firefox 3.6从JavaScript文件系统中读取文件 - 例如,请参阅我的EPUB reader proof of concept

但是,您无法直接从JavaScript编写文件。你必须通过服务器。

答案 7 :(得分:0)

Mozilla计划将FileSaver包含在Gecko 9中: https://bugzilla.mozilla.org/show_bug.cgi?id=557540