Как отключить кеширование в .NET WebBrowser Control? - PullRequest
9 голосов
/ 06 августа 2010

Я часами гуглял и пытался это выяснить, а я просто не могу.У меня есть 1 элемент управления webbrowser на форме, webbrowser1.

Как только я загружаю страницу, скажем, google.com, если я использую webbrowser1.refresh() или webbrowser1.navigate("google.com"), она не перезагружает страницу, она кэшируется, поэтому просто перезагружает кеш.Это очень очевидно, особенно на таких страницах, как форумы или craigslist.

Мне нужно очищать кэш между каждым обновлением (не идеально) или отключать кэширование все вместе, есть идеи?Единственные вещи, которые я нашел, устарели (vb6 или ниже).

Ответы [ 8 ]

5 голосов
/ 16 мая 2012

Добавьте следующий метатег на своих страницах

<meta http-equiv="cache-control" content="no-cache">
5 голосов
/ 06 августа 2010

Вы можете попробовать позвонить webbrowser1.Refresh(WebBrowserRefreshOption.Completely). Он должен обновить страницу и показать последнюю версию, что-то вроде ctrl + F5 в IE. См. здесь и здесь подробнее.

1 голос
/ 30 июня 2012

использовать navigate(url,4) 0x4=noCache флаг

1 голос
/ 10 марта 2012

В методе .navigate вы передаете число 2 (флаг no history), но это убьет историю только для этой навигации, не убьет историю, когда вы переходите по ссылкам. Если вы хотите уничтожить историю для ссылок, по которым щелкнули, то вы можете перехватить навигацию во время события beforenavigate, отменить навигацию, установив cancel = true, а затем, используя URL-адрес, предоставленный событием, повторно выполнить навигацию, используя .navigate с флагом снова установите значение 2 (флаг отсутствия истории).

Что касается других элементов кэша, таких как файлы cookie, флаги не работают (хотя они, возможно, реализовали это в текущих версиях) ... Чтобы уничтожить все элементы кэша, которые вам фактически необходимы программно, сделать это вне элемента управления веб-браузера путем запроса пользовательского кэша с использованием другого Apis и удаления его, возможно, во время события завершения документа или после завершения просмотра.

Также имейте в виду, что если вы уничтожите историю с помощью элемента управления веб-обозревателя, элемент управления .goback элементов управления веб-обозревателя не будет работать (поскольку, к сожалению, он использует ту же историю и не хранит другой список истории в памяти) ... при возврате он будет действовать так, как будто нечего было возвращать: /.

Дайте мне знать, если вам нужна дополнительная помощь.

1 голос
/ 08 сентября 2011

Эта страница показывает , как очистить временный файл, прочитайте его. У меня также есть эта проблема, но когда .refresh () мне не нужен, так как он не вызывает событие documentcomplete Поэтому, когда я хочу перезагрузить, я просто использую .navigate() и перед навигацией я вызываю

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

чтобы очистить кеш.

0 голосов
/ 27 февраля 2014

Вы не можете отключить его. Вы можете либо обновить страницу, очистить кеш перед каждым запросом, либо использовать что-то, кроме элемента управления веб-браузера. Если вы хотите очистить кеш перед каждым запросом, в сети много НЕДОРОГОЙ информации. Я бы порекомендовал вам мой ответ здесь: https://stackoverflow.com/a/22074463/1607218. Осторожно, код, размещенный в других ответах на этой странице, НЕ является надежным и содержит много ошибок, но, надеюсь, мой ответ приведет вас в правильном направлении:)

0 голосов
/ 09 марта 2012

Вы можете попробовать добавить случайное число или guid в URL в качестве параметра. Такие как:

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

Это не элегантно, но работает. Надеюсь, это поможет.

0 голосов
...