通用Windows 10 WebView - 如何清除/禁用缓存?

时间:2015-10-28 12:45:36

标签: c# windows caching webview uwp

我在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文件的更改,绝对没有代码来清除/禁用缓存。然后在一些看似随意的点,文件似乎被缓存,我无法从缓存中清除它们。

4 个答案:

答案 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应用程序正在使用的路径缓存这些资产。在那里,删除这些资产并重新启动应用程序就可以了。