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

kin*_*uk4 6 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>
Run Code Online (Sandbox Code Playgroud)

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

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

那么有什么方法可以获得相应的URL,因为有一个事件是downloadComplete,当下载完成时会被触发.所以我可以通过这种方式实现这一目标.

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

Eyt*_*tan 0

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

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

当我检查 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 事件,但我不知道,因为我无法尝试(没有代码来检查它),但我希望它会有所帮助。

  • BeforeNavigate 仅调用一次,而不是为页面下载的每个文件调用一次。 (2认同)