我正在尝试基于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,当下载完成时会触发。因此,我可以通过这种方式实现。
但我必须解决上面的图像渲染时间。我被困住了。请帮帮我......
答案 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事件,但我不知道因为我不能尝试(没有代码可以检查它),但我希望它会有所帮助。