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

时间:2010-11-20 13:24:08

标签: c# wpf webbrowser-control iwebbrowser2

我正在尝试基于WPF Web浏览器控件创建自定义Web浏览器。我已实现IWebBrowser2 com接口并实现了Navigating()NavigatedTo()LoadCompleted()事件的处理程序。 但是这些事件回调只针对顶级页面触发一次。 现在假设一个页面中有一些java脚本,css和图像文件;浏览器发出单独的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,当下载完成时会触发。因此,我可以通过这种方式实现。

但我必须解决上面的图像渲染时间。我被困住了。请帮帮我......

1 个答案:

答案 0 :(得分:0)

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

  

除非导航被取消,否则此事件在 DWebBrowserEvents :: BeforeNavigate事件或DWebBrowserEvents2 :: BeforeNavigate2事件后不久被触发。容器必须显示的任何动画或“忙”指示都应该连接到此事件。

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

  

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

因此,如果您始终拥有BeforeNavigate事件,则可以使用其url并检查与DownloadBegin事件相关的下一个下载完成事件。 我的猜测是,每次下载它都会产生一个BeforeNavigate事件,但我不知道因为我不能尝试(没有代码可以检查它),但我希望它会有所帮助。