为 Windows UWP WebView 实现离线模式
Implement an Offline-mode for the Windows UWP WebView
我有一个带有 WebView 的 Windows WUP 应用程序,它正在从 Internet 加载网页。现在,如果用户离线,我想显示此页面的本地版本。网页一天一变,只显示基本的table.
我该怎么做?
感谢您的帮助。
您可以将您的网页保存在本地文件中,例如作为一个字符串,return将响应正文作为一个字符串,您可以创建一个新实例HttpClient。
这是一个方法,在你的 WebView
的 NavigationCompleted
事件中,代码如下:
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 页面,也不会加载这些对象,除非您也保存了所有资源这些动态对象。
我有一个带有 WebView 的 Windows WUP 应用程序,它正在从 Internet 加载网页。现在,如果用户离线,我想显示此页面的本地版本。网页一天一变,只显示基本的table.
我该怎么做?
感谢您的帮助。
您可以将您的网页保存在本地文件中,例如作为一个字符串,return将响应正文作为一个字符串,您可以创建一个新实例HttpClient。
这是一个方法,在你的 WebView
的 NavigationCompleted
事件中,代码如下:
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 页面,也不会加载这些对象,除非您也保存了所有资源这些动态对象。