近期由于项目需要,需将网页嵌套在winform窗体里面的webBrowser控件里面,但是不能正常调用下载问题,急需解决?
徐新帅 2017-04-21 09:20:53 近期由于项目需要,需将网页嵌套在winform窗体里面的webBrowser控件里面,通过webBrowser控件对网页进行数据获取和事件监听等操作。 目前只要网页在webBrowser控件里面打开的话,可实现对页面数据的获取及事件的监听(正常的页面导航都会自动嵌套在webBrowser控件中,通过打开新窗体事件及页面加载完成事件可以获取);如果打开附件下载的网页时。总是返回,导航已结束。不能正常下载。代码如下。
using System.ComponentModel;
using System.Windows.Forms;
using mshtml;
namespace EasySoft.Webbrowser
{
/// <summary>
/// 主要作用是屏蔽IFRAME 类的JS错误
/// </summary>
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();
}
}
}