In form load after your
browser.navigate("http://www.domain.com");
Use this:
LauncherDialog.Download += LauncherDialog_Download;
Create LauncherDialog_Download
void LauncherDialog_Download(object sender, LauncherDialogEvent e)
{
nsILocalFile objTarget = Xpcom.CreateInstance<nsILocalFile>("@mozilla.org/file/local;1");
using (nsAString tmp = new nsAString(@Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "emp.tmp"))
{
objTarget.InitWithPath(tmp);
}
//Save file dialog
Stream myStream;
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true;
saveFileDialog1.FileName = e.Filename;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
if ((myStream = saveFileDialog1.OpenFile()) != null)
{
nsIURI source = IOService.CreateNsIUri(e.Url);
nsIURI dest = IOService.CreateNsIUri(new Uri(@saveFileDialog1.FileName).AbsoluteUri);
nsAStringBase t = (nsAStringBase)new nsAString(System.IO.Path.GetFileName(@saveFileDialog1.FileName));
nsIWebBrowserPersist persist = Xpcom.CreateInstance<nsIWebBrowserPersist>("@mozilla.org/embedding/browser/nsWebBrowserPersist;1");
nsIDownloadManager DownloadMan = null;
DownloadMan = Xpcom.CreateInstance<nsIDownloadManager>("@mozilla.org/download-manager;1");
nsIDownload download = DownloadMan.AddDownload(0, source, dest, t, e.Mime, 0, null, (nsICancelable)persist, false);
if (download != null)
{
persist.SetPersistFlagsAttribute(2 | 32 | 16384);
persist.SetProgressListenerAttribute((nsIWebProgressListener)download);
persist.SaveURI(source, null, null, null, null, (nsISupports)dest, null);
}
myStream.Close();
}
}
}
The above code also triggers saveFileDialog so your program will ask where you want to save the file.
Tested and working with GeckoFX 31 and 33 but should work in 29 as well.
If it doesn't, download the latest GeckoFX from here.
And Xulrunner from here.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…