2012-01-27 57 views
0

我正在开发一个Firefox扩展,下载从当前页面的图片在Facebook中。 我不知道是否有更改默认下载目录,以X的方式,更优选要求用户输入一个。 由于如何在Firefox中更改下载文件夹的欺骗?

+0

ü要程序上的帮助或什么 – 2012-01-27 11:44:46

+0

是的,我找的,就像saveURL的方法是用于保存文件。 – 2012-01-27 13:24:16

回答

1

此信息存储在首选项文件,并且可以about:config下观看。如果优先browser.download.useDownloadDir设置为truebrowser.download.dir设置下载目录会自动使用。如果这个变量设置为false浏览器将询问用户保存该文件,在browser.download.lastDir在对话框中选择最初设置的目录。

但是,如果你正在编写一个扩展,你可能不希望使用这些偏好,而是让用户选择一个下载目录。你会使用nsIFilePicker为,沿着这些线路:

var filePicker = Components.classes["@mozilla.org/filepicker;1"] 
          .createInstance(Components.interfaces.nsIFilePicker); 
filePicker.init(window, "Please choose a download directory", filePicker.modeGetFolder); 
if (filePicker.show() == 0) 
    window.alert("Directory chosen: " + filePicker.file.path); 
1
//give your file details in this line 
downloadFile(title, url, fileType); 

// Don't change anything below if you don't know what it does 

function getDownloadFile(defaultString, fileType) 
{ 
    var nsIFilePicker = Components.interfaces.nsIFilePicker; 

    var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker); 
    fp.init(window, "Save As", nsIFilePicker.modeSave); 
    try { 
     var urlExt = defaultString.substr(defaultString.lastIndexOf(".")+1, 3); 
     if (urlExt!=fileType) defaultString += "." + fileType 
    }catch(ex){} 

    fp.defaultString = defaultString; 

    fp.appendFilter(fileType, "*." + fileType); 
    var rv = fp.show(); 
    if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) { 
     var file = fp.file; 
     var path = fp.file.path; 
     return file; 
    } 
    return null; 
} 
function downloadFile(title, url, fileType) 
{ 
    var file = getDownloadFile(title, fileType); 

    var persist = Components.classes['@mozilla.org/embedding/browser/nsWebBrowserPersist;1'].createInstance(Components.interfaces.nsIWebBrowserPersist); 
    var ios = Components.classes['@mozilla.org/network/io-service;1'].getService(Components.interfaces.nsIIOService); 
    var uri = ios.newURI(url, null, null); 

    var target = ios.newFileURI(file) 
    var xfer = Components.classes["@mozilla.org/transfer;1"] 
          .createInstance(Components.interfaces.nsITransfer); 
    xfer.init(uri, target, "", null, null, null, persist); 
    persist.progressListener = xfer; 
    persist.saveURI(uri, null, null, null, null, file); 

}