c# - 如何获取触发 downloadBegin() 事件的 URL?

标签 c# wpf webbrowser-control iwebbrowser2

我正在尝试创建一个基于 WPF Web 浏览器控件的自定义 Web 浏览器。我已经实现了 IWebBrowser2 com 接口(interface)并实现了 Navigating()NavigatedTo()LoadCompleted() 的处理程序> 事件。 但是这些事件回调只会在顶级页面触发一次。 现在假设一个页面中有一些 java script 、 css 和 image 文件;浏览器发出单独的 HTTP 请求来下载这些文件。我们希望捕获各个 HTTP 请求事件。例如,如果 HTML 页面的结构是

<html>
  <body>
    <img src="img1.bmp"/>
    <imp src="img2.bmp"/>
  </body>  
</html>

我想捕获 img1.bmp 和 img2.bmp 的单独下载时间。有人可以建议实现这一目标的方法吗?

与此同时,我发现 DWebBrowserEvents_Event 的 downloadbegin() 事件因这些图像等请求而被触发,但我无法获取它正在下载的 URL,因为处理程序将 void 作为参数.

那么有什么方法可以获取相应的 URL,因为下载完成时会触发 downloadComplete 事件。因此,我可以通过这种方式完成。

但是我要解决上面的图像渲染时间。我卡得很厉害。请帮助我....

最佳答案

我对这门课没有很深的了解,但我读了一点书。 在 mdsn 中,他们谈到了 downloadbegin() 事件:http://msdn.microsoft.com/en-us/library/cc136556(v=vs.85).aspx

This event is fired shortly after the DWebBrowserEvents::BeforeNavigate event or the DWebBrowserEvents2::BeforeNavigate2 event, unless the navigation is canceled. Any animation or "busy" indication that the container must display should be connected to this event.

当我检查 BeforeNavigate 时,我看到它的参数中有一个 url,我发现了这个(不是 msdn,但它唯一合乎逻辑的是它会有一个 url)http://blog.yezhucn.com/progie/222647_beforenavigate.htm

void BeforeNavigate(
IDispatch *pDisp, VARIANT *&url, VARIANT *&Flags, VARIANT *&TargetFrameName, VARIANT *&PostData, VARIANT *&Headers, VARIANT_BOOL *&Cancel );

因此,如果您总是有一个 BeforeNavigate 事件,您可以使用它的 url 并检查连接到 DownloadBegin 事件的下一个下载完成事件。 我的猜测是,对于每次下载,它都会产生一个 BeforeNavigate 事件,但我不知道,因为我无法尝试(没有代码来检查它),但我希望它会有所帮助。

关于c# - 如何获取触发 downloadBegin() 事件的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4232932/

相关文章:

c# - Debug.Print 与 Debug.WriteLine

c# - 只有一页的 Crystal 报表

WPF UserControls - 在 UserControl 内的按钮上设置 .Command 属性

C# Web 浏览器控件阻止父级的加载事件

CSS Firefox - 如何停用虚线边框(firefox 点击指示器)?

c# - ResolveUrl 和 ResolveClientUrl 有什么区别?

javascript - 文件 uploader 调用函数

c# - 来自 Explorer 的命令行参数在每个空格处拆分

wpf - ItemsControl 和控件附加属性

vb.net - 将焦点设置到 Web 浏览器控件中的 HTML 文本框和按钮