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

Posted

技术标签:

【中文标题】如何禁用 .NET WebBrowser 控件中的缓存?【英文标题】:How to disable caching in the .NET WebBrowser Control? 【发布时间】:2011-03-26 04:04:02 【问题描述】:

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

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

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

【问题讨论】:

vb6 网络浏览器控件示例仍然有效,请检查我的答案,因为如果您终止历史记录,它会欺骗浏览器认为它没有缓存副本。但唯一可靠的方法是使用其他 API 删除缓存。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

您可以尝试拨打webbrowser1.Refresh(WebBrowserRefreshOption.Completely)。它应该刷新页面并显示最新版本,例如 IE 中的 ctrl+F5。请参阅here 和here 了解更多信息。

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

This page shows如何清除一些临时文件,阅读它。我也有这个问题,但是当 .refresh() 对我没有用时,因为它不会触发 documentcomplete 事件。因此,当我想重新加载时,我只需使用 .navigate() 并在导航之前调用

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

为了清除缓存。

【讨论】:

【参考方案5】:

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

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

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

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

【讨论】:

【参考方案6】:

C# WebBrowser control: Clearing cache without clearing cookies

【讨论】:

【参考方案7】:

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

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

它并不优雅,但它确实有效。希望对您有所帮助。

【讨论】:

【参考方案8】:

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

【讨论】:

以上是关于如何禁用 .NET WebBrowser 控件中的缓存?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Webbrowser 控件中禁用“安全警报”窗口

在WebBrowser控件中禁用脚本?

在 WebBrowser 控件中禁用 JavaScript 错误

在 WebBrowser 控件中禁用警报窗口

wpf webBrowser 禁用超链接

从.net(C#)中的Webbrowser控件中检索选定的文本