【问题标题】:Firefox/Gecko embedded browserFirefox/Gecko 嵌入式浏览器
【发布时间】:2016-11-04 20:02:28
【问题描述】:

我使用 Gecko 嵌入式浏览器,并在最后一步单击链接并下载 zip 文件。除了浏览器使用默认程序打开文件外,它运行良好。如何防止浏览器打开下载的 zip 文件?

【问题讨论】:

    标签: firefox gecko geckofx


    【解决方案1】:

    您需要订阅 LauncherDialog 事件并提供自己的实现:

    这里的原始答案: https://bitbucket.org/geckofx/geckofx-45.0/issues/15/downloading-files-with-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();
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-02-07
      • 2011-01-02
      • 2011-11-25
      • 1970-01-01
      • 2011-03-03
      • 2016-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多