为 Windows UWP WebView 实现离线模式

Implement an Offline-mode for the Windows UWP WebView

我有一个带有 WebView 的 Windows WUP 应用程序,它正在从 Internet 加载网页。现在,如果用户离线,我想显示此页面的本地版本。网页一天一变,只显示基本的table.

我该怎么做?

感谢您的帮助。

您可以将您的网页保存在本地文件中,例如作为一个字符串,return将响应正文作为一个字符串,您可以创建一个新实例HttpClient

这是一个方法,在你的 WebViewNavigationCompleted 事件中,代码如下:

private async void webView_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args)
{
    if (args.IsSuccess == true)
    {
        try
        {
            using (HttpClient client = new HttpClient())
            {
                if (args.Uri != null && args.Uri.ToString() == "https://developer.microsoft.com/en-us/windows/develop")
                {
                    var htmlstring = await client.GetStringAsync(args.Uri);
                    StorageFolder local = ApplicationData.Current.LocalFolder;
                    StorageFile file = await local.CreateFileAsync("offline-web.html", CreationCollisionOption.ReplaceExisting);
                    using (StreamWriter writer = new StreamWriter(await file.OpenStreamForWriteAsync()))
                    {
                        writer.Write(htmlstring);
                    }
                }
            }
        }
        catch (Exception ex)
        {
        }
    }
    else
    {
        StorageFolder local = ApplicationData.Current.LocalFolder;
        StorageFile file = await local.GetFileAsync("offline-web.html");
        if (file != null)
        {
            using (StreamReader reader = new StreamReader(await file.OpenStreamForReadAsync()))
            {
                var htmlstring = await reader.ReadToEndAsync();
                sender.NavigateToString(htmlstring);
            }
        }
        else
        {
            MessageDialog dlg = new MessageDialog("Please check your internet", "Warning");
            await dlg.ShowAsync();
        }
    }
}

您也可以尝试其他方法,例如保存html文件,然后导航到本地文件。正如@Amod Gokhale 所说,如果有一些动态对象需要通过 Internet 加载,那么在离线模式下,即使您保存了 html 页面,也不会加载这些对象,除非您也保存了所有资源这些动态对象。