【问题标题】:How to clear UWP WebView cache?如何清除 UWP WebView 缓存?
【发布时间】:2016-10-10 08:19:11
【问题描述】:

我在我的 UWP 应用程序中使用 WebView,我想在关闭应用程序时清除缓存,有什么办法吗?我知道我可以通过在我的 HttpRequestMessage 中添加标题来禁用缓存,如this 链接中所述。但是,我希望能够在应用退出时清除缓存。

我确实尝试过 WebView.ClearTemporaryWebDataAsync() 没有任何成功。 一旦缓存了某些内容,它通常会保留在整个应用程序中。 任何帮助表示赞赏,谢谢。

编辑:添加代码 sn-p

var webView = new WebView();  
webView.Navigate(new Uri("http://refreshyourcache.com/en/cache-test/"));  
await WebView.ClearTemporaryWebDataAsync(); //static method  
webView.Navigate(new Uri("http://refreshyourcache.com/en/cache-test/"));

我希望静态方法清除缓存,当我再次导航到同一页面时,它的缓存应该被清除。我在这里做错了吗?

【问题讨论】:

  • 您能描述一个场景吗?通用应用程序无法清除哪些缓存数据?
  • 您是否有代码示例来重现 ClearTemporaryWebDataAsync 不适合您?
  • @Konstantin 添加了代码 sn-p
  • 我更新了我的答案——你的代码实际上对我有用。如果您想在“绿色图像”之后刷新 - 根据网站设计,您应该点击页面内的链接来重置它。

标签: windows caching webview uwp


【解决方案1】:

在 UWP (XAML) 中有 ClearTemporaryWebDataAsync 方法,它允许 webview 的缓存和 IndexedDB 数据。 MSApp 中的 JavaScript 也有类似的方法 - clearTemporaryWebDataAsync

这是适用于我的代码示例(基于您的示例):

XAML:

 <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
     <StackPanel>
         <WebView x:Name="webView" Width="800" Height="600"></WebView>
         <Button x:Name="refreshBtn" Content="Refresh" ></Button>
     </StackPanel>
 </Grid>

C#:

    public MainPage()
    {
        this.InitializeComponent();
        refreshBtn.Tapped += RefreshBtn_Tapped;

        webView.Navigate(new Uri("http://refreshyourcache.com/en/cache-test/"));


    }

    private async void RefreshBtn_Tapped(object sender, TappedRoutedEventArgs e)
    {
        await Windows.UI.Xaml.Controls.WebView.ClearTemporaryWebDataAsync();
        webView.Navigate(new Uri("http://refreshyourcache.com/en/cache-test/"));
    }

当我点击刷新按钮时,缓存被清除——我看到绿色图像。

【讨论】:

  • 我无法使用您的此代码示例清除缓存。我在包括手机在内的 3 台不同的机器上尝试过,我从未见过绿色图像。此外,有时应用会在 ClearTemporaryWebDataAsync 调用中引发“拒绝访问”异常,或者根本不会从调用中返回。
  • 我用上面的代码创建了一个新项目。您能否发布您的示例应用程序的完整代码以便我可以重现它?我想可能还有一些额外的依赖关系。
  • 我创建了一个新项目以及您在上面发布的相同代码。它仍然对我不起作用。您没有添加任何功能或任何额外内容吗?
  • 谢谢。添加这条线对我有用。 Windows.UI.Xaml.Controls.WebView.ClearTemporaryWebDataAsync();
【解决方案2】:

根据 8.1 不可能做到这一点
Ten Things You Need to Know About WebView – An Update for Windows 8.1

您现在可以使用的最接近的方法是WebView.Refresh,它“通过向服务器发送“Pragma:no-cache”标头来重新加载文件而不进行强制缓存验证。”
...或者只是清除资源管理器中的缓存

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-28
    • 2015-01-17
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 2015-11-01
    相关资源
    最近更新 更多