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

问题描述 投票:0回答:9

我已经在谷歌上搜索了几个小时并试图弄清楚这一点,但我就是做不到。 我在表单上有 1 个 webbrowser 控件,webbrowser1。

一旦我加载一个页面,比如 google.com,如果我使用

webbrowser1.refresh()
webbrowser1.navigate("google.com")
,它不会重新加载页面,它会缓存该页面,所以它只是重新加载缓存。这在论坛或 craigslist 等页面上尤其明显。

我需要在每次刷新之间清除缓存(不理想)或一起禁用缓存,有什么想法吗?我发现的唯一东西已经过时了(vb6 或更低版本)。

vb.net caching browser webbrowser-control disable-caching
9个回答
7
投票

在您的页面中添加以下元标记

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

5
投票

您可以尝试拨打

webbrowser1.Refresh(WebBrowserRefreshOption.Completely)
。它应该刷新页面并显示最新版本,类似于 IE 中的 ctrl+F5。请参阅此处此处了解更多信息。


1
投票

使用

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


1
投票

此页面显示如何清除某些临时文件,请阅读它。我也有这个问题,但是当 .refresh() 对我没有用时,因为它不会触发 documentcomplete 事件。因此,当我想重新加载时,我只需使用

.navigate()
,然后在导航之前调用

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

为了清除缓存。


1
投票

在 .navigate 方法中,您传递数字 2(无历史记录标志),但这只会杀死该导航的历史记录,不会杀死您点击链接时的历史记录。如果你想删除点击链接的历史记录,那么你可以在 beforenavigate 事件期间拦截导航,通过设置 cancel = true 取消导航,然后使用事件提供的 URL,使用带有标志的 .navigate 重新进行导航再次设置为 2(无历史记录标志)。

就 cookie 等其他缓存项而言,这些标志不起作用(尽管它们可能在当前版本中实现了这一点)...因此,要杀死您实际上需要在 Web 浏览器控制之外通过查询以编程方式执行此操作的所有缓存项使用其他 API 的用户缓存并删除它,可能是在文档完成事件期间或浏览完成时。

还要注意,如果您使用 Web 浏览器控件杀死历史记录,则 Web 浏览器控件 .goback 方法将不起作用(因为不幸的是,它使用相同的历史记录,并且不会在内存中保留另一个历史记录列表)...因此,当执行以下操作时返回,它会表现得好像没有什么可返回的:/.

如果您需要更多帮助,请告诉我。



0
投票

您可以尝试在 url 中添加随机数或 guid 作为参数。如:

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

它并不优雅,但很有效。希望有帮助。


0
投票

您无法禁用它。您可以刷新页面,在每次请求之前清除缓存,或者使用 Web 浏览器控件以外的其他内容。如果您想在每次请求之前清除缓存,网上有很多不良信息。我会在这里向您推荐我的答案:https://stackoverflow.com/a/22074463/1607218。请注意,该页面上其他答案中发布的代码不可靠,并且存在大量错误,但希望我的答案能引导您走向正确的方向:)


0
投票

在遇到问题几天后,我使用这些代码来清除缓存。解决了。

    Dim fu As Uri
    fu = New Uri("file:///D:/4hdd_txt.html")
    WebBrowser1.Refresh()        
    WebBrowser1.Url = fu
© www.soinside.com 2019 - 2024. All rights reserved.