我在我的UWP应用中遇到了很多清除WebView缓存的问题。如果我编辑从HTML页面链接的JS文件的内容,除非我重新安装应用程序,否则无法将更改传递到我的应用程序中。静态WebView.ClearTemporaryWebDataAsync()方法似乎不起作用。我还尝试添加请求头以禁用缓存:
我还尝试了以下方法,可能会影响 WebView 的缓存行为(但不确定),但仍然没有成功:
任何帮助都将非常感激!
编辑(14/12/15): 我发现添加请求标头(如上面的第一个代码示例中)确实有效,但前提是自应用程序安装以来一直存在。这很有意义,因为它只是说不要缓存此特定请求-它仍然可以使用旧的缓存版本。
现在这个方法可以作为临时解决方案,但更好的方法是能够利用缓存(例如,在应用程序会话期间),然后稍后清除缓存(例如,在下一次启动时)。
编辑(14/07/16):上述方法似乎行不通。 Webview中的缓存行为似乎不稳定...
在应用程序干净安装时,我可以看到CSS / JS文件的更改,而没有任何清除/禁用缓存的代码。然后在某些看似任意的点上,文件似乎已被缓存,并且我无法从缓存中清除它们。
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();
}
任何帮助都将非常感激!
编辑(14/12/15): 我发现添加请求标头(如上面的第一个代码示例中)确实有效,但前提是自应用程序安装以来一直存在。这很有意义,因为它只是说不要缓存此特定请求-它仍然可以使用旧的缓存版本。
现在这个方法可以作为临时解决方案,但更好的方法是能够利用缓存(例如,在应用程序会话期间),然后稍后清除缓存(例如,在下一次启动时)。
编辑(14/07/16):上述方法似乎行不通。 Webview中的缓存行为似乎不稳定...
在应用程序干净安装时,我可以看到CSS / JS文件的更改,而没有任何清除/禁用缓存的代码。然后在某些看似任意的点上,文件似乎已被缓存,并且我无法从缓存中清除它们。