我们如何将SD卡上的文件夹中的html文件加载到webview面板中?

时间:2015-04-10 12:40:39

标签: c# webview windows-phone-8.1 windows-phone

每次在我的应用程序中创建一个角色时,它都会被保存到一个名为html的文件中,该文件位于sdcard上名为RpgApp的文件夹中

所以如果字符名称是john smith,则会在sdcard上的RpgApp文件夹中找到john-smith.htm 现在这一点很有效

该应用程序还会创建一个按钮列表,每个按钮都以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(结果); to web.NavigateToString(button.Name); 当我点击一个按钮时,webview显示了我点击的按钮的名称

任何想法?

注意: 这是Windows Phone 8.1的webview,它取代了手机:Windows Phone 8中的WebBrowser。 我有这样的困难的原因之一(自上午9点以来一直试图让这项工作)是webview也是android web控件的名称,这使得很难找到与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面板中,不必要的复杂似乎是微软的方式,但它的工作原理

1 个答案:

答案 0 :(得分:0)

MSDN写道:

  

要从应用的LocalFolder或TemporaryFolder数据存储中加载未压缩和未加密的内容,请使用Navigate方法和使用ms-appdata方案的Uri。 WebView对此方案的支持要求您将内容放在本地或临时文件夹下的子文件夹中。

所以看起来如果要加载存储在不同文件夹中的html,则不支持。但是,您可以将文件的内容读取为字符串,而不是使用web.NavigateToString(yourHtmlInString)。 (NavigateToString用于将字符串格式的html加载到WebView,这就是为什么显示您单击的按钮的名称)