2010-08-06 14 views
9

Ich habe stundenlang gegoogelt und versucht, das herauszufinden, und ich kann es einfach nicht. Ich habe 1 Webbrowser-Steuerelement auf einem Formular, webbrowser1.Deaktivieren des Zwischenspeicherns im .NET WebBrowser-Steuerelement?

Sobald ich eine Seite laden, sagen google.com, wenn ich webbrowser1.refresh() oder webbrowser1.navigate("google.com") verwende, wird die Seite nicht neu geladen, sie wird zwischengespeichert, so dass nur der Cache neu geladen wird. Dies ist besonders auf Seiten wie Foren oder Craigslist sehr offensichtlich.

Ich muss den Cache zwischen jeder Aktualisierung löschen (nicht ideal) oder deaktivieren Caching alle zusammen, irgendwelche Ideen? Die einzigen Dinge, die ich gefunden habe, sind veraltet (vb6 oder niedriger).

+0

Die vb6 Web-Browser-Steuerelement Beispiele funktionieren noch, überprüfen Sie meine Antwort , da, wenn Sie Geschichte töten, es den Browser dazu bringt zu glauben, dass es keine zwischengespeicherte Kopie hat. Aber die einzige zuverlässige Möglichkeit, dies zu tun, ist den Cache mit anderen Apis zu löschen. –

Antwort

5

Sie könnten versuchen, webbrowser1.Refresh(WebBrowserRefreshOption.Completely) anrufen. Es sollte die Seite aktualisieren und die neueste Version anzeigen, etwa wie Strg + F5 in IE. Siehe here und here weitere Informationen.

1

This page shows wie eine temporäre Datei löschen, lesen Sie es. Ich habe auch dieses Problem, aber wenn .refresh() ist nicht nützlich für mich, da es Dokument complete Ereignis nicht auslöst. Also, wenn ich neu zu laden will, habe ich einfach .navigate() verwenden und vor Navigation nenne ich die

System.Diagnostics.Process.Start("rundll32.exe","InetCpl.cpl,ClearMyTracksByProcess 8") 

um Cache zu löschen.

0

Sie könnten versuchen, eine Zufallszahl oder GUID in der URL als Parameter hinzuzufügen. Wie zum Beispiel:

var url = "http://google.com"; 
webBrowser.Navigate(url + "?refreshToken=" + Guid.NewGuid().ToString()); 

Es ist nicht elegant, aber es funktioniert. Ich hoffe es hilft.

1

In der .navigate-Methode übergeben Sie die Nummer 2 (das Flag für keine Geschichte), aber dies wird nur den Verlauf für diese Navigation töten, wird nicht Geschichte für, wenn Sie Links folgen töten. Wenn Sie den Verlauf für Links, auf die geklickt wurde, abbrechen möchten, können Sie die Navigation während des Vornavigationsereignisses abfangen, die Navigation abbrechen, indem Sie cancel = true setzen und dann die vom Ereignis bereitgestellte URL verwenden und die Navigation mit .navigate mit dem Flag ausführen erneut auf 2 gesetzt (das Flag no history).

Soweit andere Cache-Elemente wie Cookies, funktionieren die Flags nicht (obwohl sie dies in aktuellen Versionen implementiert haben) ... Soto kill alle Cache-Elemente, die Sie tatsächlich brauchen, um dies außerhalb des Webbrowsers programmgesteuert zu tun Kontrollieren Sie, indem Sie den Benutzer-Cache mit anderen Apis abfragen und löschen, vielleicht während des Ereignisses "Dokument beendet" oder wenn das Browsen durchgeführt wird.

Beachten Sie auch, dass, wenn Sie den Verlauf mit Webbrowsersteuerung beenden, der Webbrowser die .goback-Methode nicht unterstützt (da er leider denselben Verlauf verwendet und keine weitere Verlaufsliste im Speicher speichert) ... Wenn man also einen Geldstrich macht, wird es so tun, als gäbe es nichts, zu dem man zurückgehen könnte: /.

Lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen.

5

Fügen Sie die folgenden Meta-Tag in Ihre Seiten

<meta http-equiv="cache-control" content="no-cache"> 
1

Verwendung navigate(url,4) 0x4=noCache Flagge

0

Sie es nicht deaktivieren können. Sie können entweder die Seite aktualisieren, den Cache vor jeder Anforderung löschen oder eine andere Funktion als das Webbrowser-Steuerelement verwenden. Wenn Sie den Cache vor jeder Anfrage löschen möchten, gibt es eine Menge schlechter Informationen online.Ich würde dir meine Antwort hier empfehlen: https://stackoverflow.com/a/22074463/1607218. Vorsicht, der Code in den anderen Antworten auf dieser Seite ist nicht zuverlässig und ist massiv fehlerhaft, aber hoffentlich wird meine Antwort Sie in die richtige Richtung führen:)