6

我正在尝试创建一个基于 WPF Web 浏览器控件的自定义 Web 浏览器。我已经实现了IWebBrowser2 com接口并实现了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,因为下载完成时会触发下载完成事件。这样我就可以做到这一点。

但是我必须解决上面的图像渲染时间。我被困得很厉害。请帮我....

4

1 回答 1

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

于 2012-12-27T08:58:47.450 回答