徐新帅 2017-04-06 01:42 采纳率: 0%
浏览 1544

用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();
    }
}

改写的webbrowser如上。
如下是调用。
///
/// 创建新选项卡
///
///
///
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)
        {
        }
    }
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-05 16:32
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在.NET Framework中,WebBrowser控件是一个非常强大的浏览器对象,它允许您从本地或远程服务器下载资源。然而,在某些情况下,用户可能遇到“闪现”问题,即下载过程开始后,似乎突然中断并返回到主界面。这可能是由于各种原因导致的,例如网络连接不稳定、下载速度慢或者服务器端的限制等。

    以下是一些可能导致这种现象的原因及解决方案:

    1. 网络问题:确保您的网络连接稳定,并且没有阻止浏览器下载请求的防火墙规则。
    2. 浏览器兼容性问题:如果尝试的是旧版本的浏览器,可能会遇到一些兼容性问题。您可以尝试更新浏览器以解决这个问题。
    3. 服务器端限制:服务器端可能有特定的下载限制。检查服务器的文档,了解是否有相关的下载限制。
    4. 浏览器缓存问题:有时候,浏览器缓存中的数据可能会阻止新的下载。尝试清空浏览器缓存和Cookies,然后重新加载网页。
    5. 浏览器设置问题:有些浏览器(特别是IE)可能会自动阻止下载,尤其是对于非必需的链接。您可以尝试禁用此功能来测试。
    6. JavaScript错误:如果您的脚本包含错误,也可能导致下载过程被中断。请查看您的JavaScript代码并修复任何错误。
    7. 安全策略:某些网站可能会使用HTTP/HTTPS重定向,从而绕过浏览器的安全策略。确保网站支持这些协议,否则无法正常访问。

    为了解决这个问题,您可以采取以下步骤:

    • 更新浏览器:尝试使用最新版本的浏览器,因为它们通常会有一些已知的问题并提供更好的性能。
    • 清理浏览器缓存和cookies:这可以清除浏览器缓存中不必要的信息,包括临时文件和Cookie。
    • 检查服务器响应:确认服务器是否正在处理请求,并且没有阻止下载。
    • 验证URL:确保您提供的URL是正确的,并且指向一个合法的网站。
    • 使用代理服务器:如果您必须通过代理服务器进行下载,请确保正确配置了代理服务器并使用正确的地址。
    • 调试工具:使用调试工具(如Fiddler)观察下载过程,以便更详细地了解问题所在。
    • 使用代理服务器:如果您必须通过代理服务器进行下载,请确保正确配置了代理服务器并使用正确的地址。

    希望这些建议对您有所帮助!

    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀