我们如何将 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,这就是显示您单击的按钮名称的原因)