我们如何将 SD 卡上文件夹中的 html 文件加载到 Web 视图面板中?
How do we load a html file from a folder on a sdcard into a webview panel?
每次在我的应用程序中制作角色时,它都会保存到 sdcard 上名为 RpgApp 的文件夹中以它命名的 html 文件中
所以如果角色的名字是 john smith 那么将会有一个 john-smith.htm 位于 sdcard 上的 RpgApp 文件夹中
现在那位工作得很好
该应用程序还制作了一个按钮列表,每个按钮都以 RpgApp 文件夹中的一个文件命名(因此在这种情况下会有一个名为 john-smith.html 的按钮)并且内容与显示为 john-smith.html 的名称
每个按钮在点击时都有以下方法
private void htmlButtonClick(object sender, RoutedEventArgs e)
{
StorageFolder externalDevices = Windows.Storage.KnownFolders.RemovableDevices;
string curDir = externalDevices.ToString();
Button button = sender as Button;
Uri result = new Uri(String.Format("file:///{0}/RpgApp/"+button.Name,curDir));
web.Navigate(result);
}
现在的想法是,当您单击按钮时,webview 控件(恰如其分地命名为 "web")加载文件的内容(您注意到 button.name 作为 url? 那是因为按钮名称是文件名 :)
但浏览器却不为所动,只是保持空白
为了测试我改变了web.Navigate(结果);到 web.NavigateToString(button.Name);
果然,每当我点击一个按钮时,网络视图都会显示我点击的按钮的名称
有什么想法吗?
注意:
这是 windows phone 8.1 的网页视图,它取代了 windows phone 8 中的 phone:WebBrowser。
我遇到这样困难的原因之一(从早上 9 点开始就试图完成这项工作)是 webview 也是 android 网络控件的名称,这使得很难找到与 windows 8.1 相关的信息
该应用程序可以访问 sdcard,它是我们正在阅读或试图阅读的文件夹和文件的应用程序,似乎当涉及到文件时,应该工作的东西不起作用,这非常令人沮丧。
WPMed 帮助后的解决方案
private async void htmlButtonClick(object sender, RoutedEventArgs e)
{
Button button = sender as Button;
string fileContent;
StorageFolder externalDevices = Windows.Storage.KnownFolders.RemovableDevices;
StorageFolder sdcard = (await externalDevices.GetFoldersAsync()).FirstOrDefault();
var dataFolder = await sdcard.GetFolderAsync("RpgApp");
var file = await dataFolder.GetFileAsync(button.Content.ToString());
using (StreamReader reader = new StreamReader(await file.OpenStreamForReadAsync()))
{
fileContent = await reader.ReadToEndAsync();
}
web.NavigateToString(fileContent);
}
}
似乎是微软出于某种原因,不想让你在本地加载 html 文件(除非在隔离的文件夹中锁定用户访问,一些安全问题?)
因此,正如 WPMed 指出的那样,您必须将文件加载到字符串中,然后将字符串加载到 webview 面板中,不必要的复杂似乎是微软的方式,但它有效
MSDN 是这样写的:
To load uncompressed and unencrypted content from your app’s LocalFolder or TemporaryFolder data stores, use the Navigate method with a Uri that uses the ms-appdata scheme. The WebView support for this scheme requires you to place your content in a subfolder under the local or temporary folder.
因此,如果您想加载存储在不同文件夹中的 html,似乎是不受支持的。但是,您可以将文件内容读取为字符串,并且可以使用 web.NavigateToString(yourHtmlInString)
。 (NavigateToString 用于将字符串格式的 html 加载到 WebView,这就是显示您单击的按钮名称的原因)
每次在我的应用程序中制作角色时,它都会保存到 sdcard 上名为 RpgApp 的文件夹中以它命名的 html 文件中
所以如果角色的名字是 john smith 那么将会有一个 john-smith.htm 位于 sdcard 上的 RpgApp 文件夹中 现在那位工作得很好
该应用程序还制作了一个按钮列表,每个按钮都以 RpgApp 文件夹中的一个文件命名(因此在这种情况下会有一个名为 john-smith.html 的按钮)并且内容与显示为 john-smith.html 的名称 每个按钮在点击时都有以下方法
private void htmlButtonClick(object sender, RoutedEventArgs e)
{
StorageFolder externalDevices = Windows.Storage.KnownFolders.RemovableDevices;
string curDir = externalDevices.ToString();
Button button = sender as Button;
Uri result = new Uri(String.Format("file:///{0}/RpgApp/"+button.Name,curDir));
web.Navigate(result);
}
现在的想法是,当您单击按钮时,webview 控件(恰如其分地命名为 "web")加载文件的内容(您注意到 button.name 作为 url? 那是因为按钮名称是文件名 :)
但浏览器却不为所动,只是保持空白
为了测试我改变了web.Navigate(结果);到 web.NavigateToString(button.Name); 果然,每当我点击一个按钮时,网络视图都会显示我点击的按钮的名称
有什么想法吗?
注意: 这是 windows phone 8.1 的网页视图,它取代了 windows phone 8 中的 phone:WebBrowser。 我遇到这样困难的原因之一(从早上 9 点开始就试图完成这项工作)是 webview 也是 android 网络控件的名称,这使得很难找到与 windows 8.1 相关的信息
该应用程序可以访问 sdcard,它是我们正在阅读或试图阅读的文件夹和文件的应用程序,似乎当涉及到文件时,应该工作的东西不起作用,这非常令人沮丧。
WPMed 帮助后的解决方案
private async void htmlButtonClick(object sender, RoutedEventArgs e)
{
Button button = sender as Button;
string fileContent;
StorageFolder externalDevices = Windows.Storage.KnownFolders.RemovableDevices;
StorageFolder sdcard = (await externalDevices.GetFoldersAsync()).FirstOrDefault();
var dataFolder = await sdcard.GetFolderAsync("RpgApp");
var file = await dataFolder.GetFileAsync(button.Content.ToString());
using (StreamReader reader = new StreamReader(await file.OpenStreamForReadAsync()))
{
fileContent = await reader.ReadToEndAsync();
}
web.NavigateToString(fileContent);
}
}
似乎是微软出于某种原因,不想让你在本地加载 html 文件(除非在隔离的文件夹中锁定用户访问,一些安全问题?) 因此,正如 WPMed 指出的那样,您必须将文件加载到字符串中,然后将字符串加载到 webview 面板中,不必要的复杂似乎是微软的方式,但它有效
MSDN 是这样写的:
To load uncompressed and unencrypted content from your app’s LocalFolder or TemporaryFolder data stores, use the Navigate method with a Uri that uses the ms-appdata scheme. The WebView support for this scheme requires you to place your content in a subfolder under the local or temporary folder.
因此,如果您想加载存储在不同文件夹中的 html,似乎是不受支持的。但是,您可以将文件内容读取为字符串,并且可以使用 web.NavigateToString(yourHtmlInString)
。 (NavigateToString 用于将字符串格式的 html 加载到 WebView,这就是显示您单击的按钮名称的原因)