2011-07-12 18 views
7

Firefoxのアドオン開発には初めてのことですが、それまではうまくいっていますが、基本的にWebからファイルをダウンロードし、URIを与えてファイルを保存する方法に固執していますディスクに保存します。 MozillaのMDNのドキュメントには、ファイルのアップロード方法に関する情報がありますが、ダウンロードするファイルセクションは空であり、まだ書かれていません。悲しいことに、私はこれを行う方法を説明する文書は見つかりませんでした。Firefoxのアドオンでファイルをダウンロードする

誰でもこれを行う方法に関する関連ドキュメントを知っていますか?

saveURL(images[i].replace(/\/s/g, "/n"), null, null, false, true, null); 

は明らかに、最初の引数は要求するURIです:


古いFacebookの写真アルバムのダウンローダのアドオンは、そのオーバーレイJavaScriptでこの関数呼び出しを使用しています。 saveURL関数はどこにも定義されていないので、拡張API関数と見なします。私は私の新しいアドオンでそれを試して、それは動作します。しかし、私は他の議論が何を意味するのか知りたい。

+0

あなたはこれを見ましたか? http://stackoverflow.com/questions/3749231/download-file-using-javascript-jquery 私はFirefoxのアドオンでJQueryを使用しました。 – ysrb

+0

悲しいことに、私は問題のWebサーバーにアクセスできないため、ファイルが送信されるMIMEタイプを変更できないため、これは実際には私にとってはうまくいかないでしょう。拡張機能でこれを行うためのネイティブAPIメソッドが必要です - 私はそれを見つけることができません。 –

+0

@Delan: 'saveURL'はAPI関数ではありません。インポートされたJavaScriptモジュールなどで定義されている可能性があります。 –

答えて

5

これを行うための標準的な方法は、たnsIWebBrowserPersistである:

var persist = 
    Cc["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"]. 
    createInstance(Ci.nsIWebBrowserPersist); 
persist.saveURI(serverURI, null, null, null, "", targetFile); 

は、詳細はhttps://developer.mozilla.org/en/Code_snippets/Downloading_Filesを参照してください。

+1

FF19では、saveURIは7番目のパラメータprivacyContextを受け取りました。使用法[here](https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIWebBrowserPersist#saveURI%28%29) – Bora

1

これは、誰でも簡単な解決策を探している人にとって、簡単にコピー/ペーストするオプションです。 main.jsに入れ、ファイル名、ディレクトリ、URLを変更してください。

function DownloadFile(sLocalFileName, sRemoteFileName) 
{ 
    var saveToDirectory = 'C:\\Users\\louis\\downloads\\'; 

    var chrome = require("chrome"); 

    var oIOService = chrome.Cc["@mozilla.org/network/io-service;1"].getService(chrome.Ci.nsIIOService) 

    var oLocalFile = chrome.Cc["@mozilla.org/file/local;1"].createInstance(chrome.Ci.nsILocalFile); 
    oLocalFile.initWithPath(saveToDirectory + sLocalFileName); 

    var oDownloadObserver = {onDownloadComplete: function(nsIDownloader, nsresult, oFile) {console.log('download complete...')}}; 

    var oDownloader = chrome.Cc["@mozilla.org/network/downloader;1"].createInstance(); 
    oDownloader.QueryInterface(chrome.Ci.nsIDownloader); 
    oDownloader.init(oDownloadObserver, oLocalFile); 

    var oHttpChannel = oIOService.newChannel(sRemoteFileName, "", null); 
    oHttpChannel.QueryInterface(chrome.Ci.nsIHttpChannel); 
    oHttpChannel.asyncOpen(oDownloader, oLocalFile);  

} 
DownloadFile("saveAsThis.mp3","http://domain.com/file.mp3"); 
関連する問題