如何在.NET WebBrowser控件中禁用缓存?

9

我已经谷歌了几个小时,试图弄清楚这个问题,但是我无法解决。 我的表单上有一个网页浏览器控件,名为webbrowser1。

一旦我加载了一个页面,比如说google.com,如果我使用webbrowser1.refresh()或者webbrowser1.navigate("google.com"),它不会重新加载页面,因为它已经被缓存了,所以它只是重新加载缓存。这在论坛或craigslist这样的页面上尤其明显。

我需要在每次刷新之间清除缓存(不理想)或完全禁用缓存,有什么建议吗?我找到的唯一的东西都过时了(vb6或更低版本)。


VB6网页浏览器控件示例仍将起作用,请查看我的答案,因为如果您清除历史记录,它会欺骗浏览器认为它没有缓存副本。但是,唯一可靠的方法是使用其他API删除缓存。 - Erx_VB.NExT.Coder
8个回答

7
请在您的页面中添加以下元标签。
<meta http-equiv="cache-control" content="no-cache">

5
你可以尝试调用webbrowser1.Refresh(WebBrowserRefreshOption.Completely)。它应该会刷新页面并显示最新版本,类似于IE中的ctrl+F5。有关更多信息,请参见此处此处

1
在.navigate方法中,您传递数字2(无历史记录标志),但这只会杀死该导航的历史记录,不会杀死跟随链接时的历史记录。如果您想要杀死点击链接时的历史记录,可以在beforenavigate事件期间拦截导航,通过将cancel = true取消导航,然后使用事件提供的URL再次使用.navigate进行导航,并将标志设置为2(无历史记录标志)。
至于其他缓存项(如cookies),标志不起作用(尽管当前版本可能已实现此功能)。因此,您实际上需要通过使用其他API查询用户缓存并删除它来以编程方式杀死所有缓存项,例如在文档完成事件或浏览完成时。
还要注意,如果您使用Web浏览器控件杀死历史记录,则Web浏览器控件的.goback方法将不起作用(因为它不幸地使用相同的历史记录,并且不在内存中保留另一个历史记录列表)。因此,在执行goback操作时,它将表现得像没有可以返回到:/。
如果您需要更多帮助,请告诉我。

1

这个页面展示了如何清除一些临时文件,请阅读。我也遇到了这个问题,但是当 .refresh() 对我没有用处时,因为它不会触发 documentcomplete 事件。所以当我想要重新加载时,我只需使用 .navigate(),并在导航之前调用

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

为了清除缓存。


1

使用 navigate(url,4) 0x4=noCache 标志


0
你可以尝试在URL中添加一个随机数或GUID作为参数,例如:
var url = "http://google.com";
webBrowser.Navigate(url + "?refreshToken=" + Guid.NewGuid().ToString());

这不是很优雅,但它能够工作。希望能对你有所帮助。



0

你不能禁用它。你可以刷新页面,在每个请求之前清除缓存,或使用其他的浏览器控件。如果你想在每个请求之前清除缓存,那么网上有很多错误的信息。我建议您查看我的答案https://stackoverflow.com/a/22074463/1607218。请注意,该页面上其他答案中发布的代码是不可靠的,并且存在大量的错误,但是我希望我的回答能引导您走向正确的方向: )


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接