【问题标题】:How do I get current status code in a WebBrowser control?如何在 WebBrowser 控件中获取当前状态代码?
【发布时间】:2014-07-13 18:55:52
【问题描述】:

我需要从 WebBrowser 中加载的页面获取 http 状态代码,我最终得到了这个解决方案:

我正在使用来自 WebBrowser ActiveXInstance 实例的 NavigateError 事件。但它不能正常工作:如果页面无法加载并且用户 wb.Refresh() 它和加载正常并且我有仅存储旧的 http 状态错误代码,因为成功加载不会更改我的 http 状态代码。我该如何解决?

public doSomething()
{
    SHDocVw.WebBrowser axBrowser = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;
    axBrowser.NavigateError += new SHDocVw.DWebBrowserEvents2_NavigateErrorEventHandler(axbrowser_navigatorError);
}

public void axbrowser_navigatorError(object pDIsp, ref object URL, ref object frame, ref object statusCode, ref bool Cancel)
{
    statuscodeLabel.Text = statusCode.ToString();
    int.TryParse(statusCode.ToString(), out httpCode);
}

【问题讨论】:

  • NavigateComplete2 在没有错误时触发。所以用它来重置你的状态码。
  • 使用这个我可以假设没有发生错误但无法获得http状态代码,因为它的参数是object pDisp, ref object url,其中pDsip是一个WebBrowser实例(我们无法获得没有我的axbrowser_navigatorError()) 和url 的http 状态代码是我们正在处理的url,对吧?
  • 它看起来就像是 WebBrowser 的 DocumentCompleted 等价物......

标签: c# windows winforms webbrowser-control http-status-codes


【解决方案1】:

WebBrowserRefreshNavigate/Navigate2 完全不同。没有为 Refresh 触发 NavigateComplete2。我不认为你可以得到 Refresh 的状态码,除非你使用一些低级的 APP handler 钩子。相关:Wpf WebBrowser Refresh.

【讨论】:

    【解决方案2】:

    您可以在 LoadComplete() 上从NavigationEventArgs 获取WebResponse,这也应该在页面刷新时触发。

    【讨论】:

    • 这是来自哪个类的方法?我在WebBrowser(SHDocVw.WebBrowser)webBrowser1.ActiveXInstance 都找不到它。这是你说的 msdn.microsoft.com/en-us/library/system.web.ui.page.loadcomplete(v=vs.110).aspx 吗?
    • 您可以使用工具箱中的 WebBrowser 控件吗?这个包装了 ActiveX,但增加了更多控制。
    • 这就是我正在使用的。注意doSomething() 函数中的转换。仅使用 WebBrowser 无法获取 http 状态代码。
    猜你喜欢
    • 1970-01-01
    • 2020-05-26
    • 2014-01-03
    • 2011-05-04
    • 2018-07-23
    • 2011-03-24
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多