2010-05-17 71 views
2

由于Greasemonkey无法从本地硬盘读取/写入文件,因此我听说有人建议使用Google齿轮,但我不知道齿轮。如何启用本地javascript在我的电脑上读取/写入文件?

所以,我决定增加一个

<script type="text/javascript" src="file:///c:/test.js">/script> 

现在,这个测试将使用FileSystemObject的读/写文件。由于file:///c:/test.js是来自本地硬盘的JavaScript文件,因此它应该可以读取/写入本地硬盘上的文件。

我试过了,但Firefox阻止file:///c:/test.js脚本从本地磁盘读取/写入文件。 :(

是否有Firefox的about:config在这里我们可以指定让特定的脚本任何设置,从LOCALFILE说或xyz.com,已阅读我的本地磁盘上的文件/写权限?

+1

这不是*脚本*的位置决定它的运作下同源策略的起源,但页面的包括脚本的位置。无论如何,'FileSystemObject'是一个ActiveX控件,所以Firefox中不存在这样的事情。 – bobince 2010-05-17 01:19:39

回答

4

您可以使用这些铬范围内

var FileManager = 
{ 
Write: 
    function (File, Text) 
    { 
     if (!File) return; 
     const unicodeConverter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"] 
      .createInstance(Components.interfaces.nsIScriptableUnicodeConverter); 

     unicodeConverter.charset = "UTF-8"; 

     Text = unicodeConverter.ConvertFromUnicode(Text); 
     const os = Components.classes["@mozilla.org/network/file-output-stream;1"] 
      .createInstance(Components.interfaces.nsIFileOutputStream); 
     os.init(File, 0x02 | 0x08 | 0x20, 0700, 0); 
     os.write(Text, Text.length); 
     os.close(); 
    }, 

Read: 
    function (File) 
    { 
     if (!File) return; 
     var res; 

     const is = Components.classes["@mozilla.org/network/file-input-stream;1"] 
      .createInstance(Components.interfaces.nsIFileInputStream); 
     const sis = Components.classes["@mozilla.org/scriptableinputstream;1"] 
      .createInstance(Components.interfaces.nsIScriptableInputStream); 
     is.init(File, 0x01, 0400, null); 
     sis.init(is); 

     res = sis.read(sis.available()); 

     is.close(); 

     return res; 
    }, 
} 

例:

var x = FileManager.Read("C:\\test.js"); 

另请参见

+0

要清楚,这不适用于Greasemonkey脚本。 'Components.classes'会引发安全错误。 – 2013-10-10 06:51:35