2014-12-08 5 views
2

Как я могу справиться с загрузкой в ​​GeckoFx Я использую версию Я нашел несколько способов, как добавление события
LauncherDialog_Download(object sender, LauncherDialogEvent e) Но, я не в состоянии добавить обработчик для этого событияКак справиться с загрузкой в ​​GeckoFX 29

Я попытался это для обработчика

LauncherDialogFactory.Register(); 
LauncherDialog.Download += LauncherDialog_Download; 

Но это показывает, как ошибки, как я могу добавить обработчик
и есть ли другие способы обработки загрузки в GeckoFx 29?

+0

Какая ошибка показывает это? –

+0

для LauncherDialogFactory.Register(), namespace не удалось найти и для LauncherDialog.Download + = LauncherDialog_Download, is 'event', но используется как 'type' –

+0

. Вам нужно включить соответствующие пространства имен для использования этой функции –

ответ

5

В виде нагрузки после

browser.navigate("http://www.domain.com"); 

Используйте это:

LauncherDialog.Download += LauncherDialog_Download; 

Создать 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) + "\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<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(); 
      } 
     } 
    } 

Приведенный выше код также запускает SaveFileDialog так что ваша программа спросит, куда вы хотите сохраните файл.

Протестировано и работает с GeckoFX 31 и 33, но должно работать и в 29. Если это не загрузите последнюю GeckoFX from here.

И XulRunner from here.

3

решение Джонатана не работает с geckoFX 45 - кажется, что они изменили некоторые из библиотек и осуждал менеджер загрузки. Вот тот же самый фрагмент события, обновленный для работы с GeckoFX 45

private void LauncherDialog_Download(object sender, Gecko.LauncherDialogEvent e) 
    { 
     nsILocalFile objTarget = Xpcom.CreateInstance<nsILocalFile>("@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<nsIWebBrowserPersist>("@mozilla.org/embedding/browser/nsWebBrowserPersist;1"); 

       nsITransfer nst = Xpcom.CreateInstance<nsITransfer>("@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(); 
      } 
     } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^