How to handle downloading in GeckoFX 29

后端 未结 3 2127
你的背包
你的背包 2020-12-20 02:16

How can I handle downloading in GeckoFx I\'m using version 29 I\'ve found some ways like adding event of
LauncherDialog_Download(

3条回答
  •  Happy的楠姐
    2020-12-20 02:55

    Jonathan's solution doesn't work with geckoFX 45 - it seems they changed some of the libraries and deprecated the download manager. Here is the same event snippet updated to work with GeckoFX 45

        private void LauncherDialog_Download(object sender, Gecko.LauncherDialogEvent e)
        {
            nsILocalFile objTarget = Xpcom.CreateInstance("@mozilla.org/file/local;1");
    
            using (nsAString tmp = new nsAString(@Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\temp.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("@mozilla.org/embedding/browser/nsWebBrowserPersist;1");
    
                    nsITransfer nst = Xpcom.CreateInstance("@mozilla.org/transfer;1");
                    nst.Init(source, dest, t, e.Mime, 0, null, persist, false);
    
                    if (nst != null)
                    {
                        persist.SetPersistFlagsAttribute(2 | 32 | 16384);
                        persist.SetProgressListenerAttribute((nsIWebProgressListener)nst);
                        persist.SaveURI(source, null, null, (uint)Gecko.nsIHttpChannelConsts.REFERRER_POLICY_NO_REFERRER, null, null, (nsISupports)dest, null);
                    }
    
                    myStream.Close();
                }
            }
        }
    

提交回复
热议问题