2010-11-20 6 views
6

Ich versuche, einen benutzerdefinierten Webbrowser basierend auf dem WPF-Webbrowser-Steuerelement zu erstellen. Ich habe die IWebBrowser2 com Schnittstelle implementiert und die Handler für Navigating(), NavigatedTo() und LoadCompleted() Ereignisse implementiert. Diese Ereignisrückrufe werden jedoch nur einmal für die oberste Seite ausgelöst. Angenommen, eine Seite enthält Java Script-, CSS- und Image-Dateien. Der Browser gibt separate HTTP-Anforderungen zum Herunterladen dieser Dateien aus. Wir möchten die einzelnen HTTP-Anfrage-Ereignisse erfassen. Wenn zum Beispiel der Struktur der HTML-Seite istWie erhält man die URL, für die das downloadBegin() Ereignis ausgelöst wird?

<html> 
    <body> 
    <img src="img1.bmp"/> 
    <imp src="img2.bmp"/> 
    </body> 
</html> 

würde Ich mag die einzelnen Download-Zeiten für img1.bmp und img2.bmp erfassen. Könnte jemand bitte einen Weg vorschlagen, dies zu erreichen?

Inzwischen habe ich gefunden, dass downloadbegin() Ereignis von DWebBrowserEvents_Event für diese Anfrage für Bild etc gefeuert wird, aber ich kann nicht die URL von denen es herunterladen, als der Handler void als Parameter.

So gibt es eine Möglichkeit, die URL entsprechend zu erhalten, da es ein Ereignis gibt, dass DownloadComplete ist, das ausgelöst wird, wenn der Download abgeschlossen ist. So kann ich das erreichen.

Aber ich muss die obige Bildwiedergabezeit lösen. Ich stecke schlecht fest. Bitte helfen Sie mir ....

Antwort

0

Ich habe keine tiefen Kenntnisse über diese Klassen, aber ich habe ein wenig gelesen. in MDSN sagen, dass sie über die downloadbegin() Ereignis: http://msdn.microsoft.com/en-us/library/cc136556(v=vs.85).aspx

Dieses Ereignis wird ausgelöst wird kurz nach die DWebBrowserEvents :: BeforeNavigate Ereignis oder der DWebBrowserEvents2 :: BeforeNavigate2 Ereignis, es sei denn, die Navigation wird abgebrochen. Jede Animation oder "Beschäftigt" -Anzeige, die der Container anzeigen muss, sollte mit diesem Ereignis verbunden sein.

und wenn ich die BeforeNavigate geprüft sah ich, dass es eine URL in seiner Paramater hat ich das gefunden (nicht Msdn aber es ist nur logisch, dass itll eine URL haben) http://blog.yezhucn.com/progie/222647_beforenavigate.htm

Leere BeforeNavigate (
IDispatch * pDisp, VARIANT * & url, VARIANT * & Flags, VARIANT * & TargetFrameName, VARIANT * & Postdata, VARIANT * & Header, VARIANT_BOOL * & Abbrechen );

wenn Sie also immer ein BeforeNavigate Ereignis haben, können Sie die URL verwenden und überprüfen Sie die nächste Download abgeschlossen Ereignis, das ist auf das Ereignis DownloadBegin verbunden. Meine Vermutung ist, dass es für jeden Download ein BeforeNavigate-Event macht, aber ich weiß es nicht, weil ich es nicht versuchen kann (kein Code, um es anzumachen), aber ich hoffe, dass es hilft.

+2

BeforeNavigate wird nur einmal aufgerufen, nicht einmal für jede Datei, die für die Seite heruntergeladen wird. –

Verwandte Themen