nsIBrowserParsist
nsIBrowserParsist.saveURIを使えば、URIが刺すリソースをファイルに保存することができるらしいのですが・・・
const mzCC = Components.classes; const mzCI = Components.interfaces; function save(srcURI, destFile){ var nsiPersist = Components.interfaces.nsIWebBrowserPersist; var persist = mzCC["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"].createInstance(nsiPersist); persist.persistFlags = nsiPersist.PERSIST_FLAGS_REPLACE_EXISTING_FILES | nsiPersist.PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION; persist.saveURI(srcURI, null, null, null, null, destFile); return destFile.fileSize; //この時点でファイルが存在しないことが多く、例外となる。 }
上記コードのコメントのとおりの不都合があります。
一応、nsIBrowserParsistには進捗監視用のリスナを設定できるんですが、それで監視できるのは「ダウンロード完了」であって「ファイル書き込み完了」ではない様子。なので、saveURI直後に参照にいくと例外を吐く可能性が高い。
さっきダウンロードしてきて保存されたものを使いたいんだけど・・・書き込み完了を検知する方法はないんだろうか。
setTimeoutかけてexistsでチェックし続ければいけるのかなぁ・・・。