2010-05-17 50 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

相關問題