徐新帅 2017-04-05 10:08 采纳率: 100%
浏览 1497

使用Webbrowser控件 点击下载文件时,文件不能正确下载。求解

二、
namespace EasySoft.Webbrowser
{
///
/// 主要作用是屏蔽IFRAME 类的JS错误
///
public partial class WebbrowserExt : System.Windows.Forms.WebBrowser
{
public string BaseUrl = string.Empty;
public WebbrowserExt()
{
InitializeComponent();
this.AllowWebBrowserDrop = false;
(this.ActiveXInstance as SHDocVw.WebBrowser).NewWindow3 += WebbrowserExt_NewWindow3;
(this.ActiveXInstance as SHDocVw.WebBrowser).FileDownload += WebbrowserExt_FileDownload;
}
public WebbrowserExt(IContainer container)
{
container.Add(this);
InitializeComponent();
this.AllowWebBrowserDrop = false;
var IhtmlDocument3 = (IHTMLDocument3)this.Document.DomDocument;
IhtmlDocument3.enableDownload = false;
(this.ActiveXInstance as SHDocVw.WebBrowser).NewWindow3 += WebbrowserExt_NewWindow3;
(this.ActiveXInstance as SHDocVw.WebBrowser).FileDownload += WebbrowserExt_FileDownload;
}

    void WebbrowserExt_FileDownload(bool ActiveDocument, ref bool Cancel)
    {
        //取消默认的文件下载
        if (!ActiveDocument)
            Cancel = true;
    }

    void WebbrowserExt_NewWindow3(ref object ppDisp, ref bool Cancel, uint dwFlags, string bstrUrlContext, string bstrUrl)
    {
        BaseUrl = bstrUrl;
    }

    private SHDocVw.IWebBrowser2 Iwb2; 
    protected override void AttachInterfaces(object nativeActiveXObject)
    {
        Iwb2 = (SHDocVw.IWebBrowser2)nativeActiveXObject;
        Iwb2.Silent = true;
        base.AttachInterfaces(nativeActiveXObject);
    }

    protected override void DetachInterfaces()
    {
        Iwb2 = null;
        base.DetachInterfaces();
    }
}

}
一、
private void WebBrowser_NewWindow(object sender, CancelEventArgs e)
{
string strurl;
var wb = new WebbrowserExt();
wb.ScriptErrorsSuppressed = true;
wb.Navigating += new WebBrowserNavigatingEventHandler(WebBrowser_Navigating);
wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted);
wb.NewWindow += new CancelEventHandler(WebBrowser_NewWindow);
wb.ObjectForScripting = this;
try
{
TabPage currentTabPage = tabControls.SelectedTab;
//WebBrowser myWebBrowser = (WebBrowser)currentTabPage.Controls[0];
var myWebBrowser = (WebbrowserExt)sender;
strurl = myWebBrowser.Document.ActiveElement.GetAttribute("href");
if (string.IsNullOrEmpty(strurl))
strurl = myWebBrowser.BaseUrl;
if (string.IsNullOrEmpty(strurl))
strurl = myWebBrowser.StatusText;
if (!strurl.Contains("://"))
strurl = "http://" + strurl;
//刷新页面,不使用缓存设置
if (strurl.Contains("?"))
strurl = strurl + "&t=" + DateTime.Now.Ticks;
else
strurl = strurl + "?t=" + DateTime.Now.Ticks;

if (strurl.Contains(".exe"))
{ }
else
{
wb.Navigate(strurl);
e.Cancel = true;
tabControls.TabPages.Add("新窗口" + SpaceString);
tabControls.TabPages[tabControls.TabPages.Count - 1].Controls.Add(wb);

                wb.Dock = DockStyle.Fill;

                tabControls.SelectedIndex = tabControls.TabPages.Count - 1;
                //清除缓存
                CleanTempFiles();
            }
        }
        catch (Exception e2)
        {
        }
    }

            点击类似为http://www.baidu.com/file/1234.doc, 不能下载成功。
            ![图片说明](https://img-ask.csdn.net/upload/201704/05/1491386913_512118.png)
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 overleaf中论文编辑,报错`pages' is a missing field, not a string, for entry 4
    • ¥15 vhdl+MODELSIM
    • ¥20 simulink中怎么使用solve函数?
    • ¥30 dspbuilder中使用signalcompiler时报错Error during compilation: Fitter failed,求解决办法
    • ¥15 gwas 分析-数据质控之过滤稀有突变中出现的问题
    • ¥15 没有注册类 (异常来自 HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
    • ¥15 知识蒸馏实战博客问题
    • ¥15 用PLC设计纸袋糊底机送料系统
    • ¥15 simulink仿真中dtc控制永磁同步电机如何控制开关频率
    • ¥15 用C语言输入方程怎么