我正在尝试创建一个基于 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/