我在UWP应用程序中清除WebView缓存时遇到了很多麻烦。
如果我编辑从我的HTML页面链接的JS文件的内容,除非我重新安装该应用程序,否则我无法对我的应用进行更改。
静态WebView.ClearTemporaryWebDataAsync()方法似乎无效。
我还尝试在请求中添加标头以禁用缓存:
private void reloadPage()
{
string url = getUrl();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, new Uri(url));
request.Headers.Add("Cache-Control", "no-cache, no-store, must-revalidate");
request.Headers.Add("Pragma", "no-cache");
myWebView.NavigateWithHttpRequestMessage(request);
}
我也试过以下内容(我不确定这是否会影响WebView的缓存行为),但仍然没有快乐:
private void onWebviewLoaded(object sender, RoutedEventArgs e)
{
Windows.Web.Http.Filters.HttpBaseProtocolFilter myFilter = new Windows.Web.Http.Filters.HttpBaseProtocolFilter();
myFilter.CacheControl.WriteBehavior = Windows.Web.Http.Filters.HttpCacheWriteBehavior.NoCache;
myFilter.CacheControl.ReadBehavior = Windows.Web.Http.Filters.HttpCacheReadBehavior.Default;
WebView.ClearTemporaryWebDataAsync().AsTask().Wait();
reloadPage();
}
非常感谢任何帮助!
编辑(2015年12月14日): 我发现在请求中添加标头(如上面第一个代码示例中所示) 可以正常工作,但是只有在应用程序的生命周期中已经存在,因为安装。这是有道理的,因为它只是说不缓存这个特定的请求 - 它仍然可以使用旧的缓存版本。
现在这可以作为一个细节,但是能够利用缓存(例如在应用会话期间),然后清除缓存(例如在下次启动时)会更好。
编辑(2016年7月14日):上述方法似乎没有结果。在webview中,缓存行为似乎不稳定......
在干净安装应用程序时,我可以看到对CSS / JS文件的更改,绝对没有代码来清除/禁用缓存。然后在一些看似随意的点,文件似乎被缓存,我无法从缓存中清除它们。
答案 0 :(得分:2)
这最终对我有用:
await WebView.ClearTemporaryWebDataAsync();
Windows.Web.Http.Filters.HttpBaseProtocolFilter myFilter = new Windows.Web.Http.Filters.HttpBaseProtocolFilter();
var cookieManager = myFilter.CookieManager;
HttpCookieCollection myCookieJar = cookieManager.GetCookies(new Uri("http://www.msftncsi.com/ncsi.txt"));
foreach (HttpCookie cookie in myCookieJar)
{
cookieManager.DeleteCookie(cookie);
}
答案 1 :(得分:1)
我不知道它是否有帮助,但尝试在网址后面添加时间戳(网址+“?=”+某些时间范围内)
答案 2 :(得分:0)
刷新webview似乎重新加载:
mainWebView.Refresh();
这绝对是一种黑客行为,但您可以在应用程序生命周期的某个时刻插入以强制重新加载内容。也许在“mainWebView_NavigationCompleted()”事件之后?
答案 3 :(得分:0)
我在UWP应用程序中的css遇到类似问题但没有被清除。我运行ProcessMon并发现UWP应用程序在Windows 10中缓存.css和.js文件:C:\ Users \\ AppData \ Local \ Packages \ microsoft.windows.authhost.sso.p_8wekyb3d8bbwe \ AC \ INetCache \ Q8IHZDMV。我正在使用Web身份验证代理,因此方案可能略有不同。如果类似于此的位置没有出现问题,您可能希望在启动UWP应用程序时尝试运行processmon(SysInternals套件的一部分),以查看是否可以识别UWP应用程序正在使用的路径缓存这些资产。在那里,删除这些资产并重新启动应用程序就可以了。