WebView.Navigate仅显示白屏

时间:2014-09-15 13:33:58

标签: webview windows-runtime windows-phone-8.1 uwp

WebView.Navigate(URI)不会加载我的uri指向的html文件。 PathToIndex来自StorageFile.Path

private static readonly Uri HomeUri = new Uri("ms-appx-web:///" + PathToIndex, UriKind.Absolute);

我要加载的html来自我之前解压缩的Zip文件。
有什么建议吗?

编辑Jogy的回答: 这是我解压缩zip文件的地方:

var localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
var unpackFolder = await localFolder.CreateFolderAsync(appName+"unzip", CreationCollisionOption.ReplaceExisting);

然后我用StorageFile.Path保存index.html路径 我尝试过ms-appdata,但我得到value does not fall within the expected range例外 我可以用

遍历所有文件
var files = await unpackFolder.GetFilesAsync();
foreach(var file in files)
{
   string name = file.Path;
}


使用NavigateToString我也可以看到Html文件,但是javascript和css仍然不起作用。

3 个答案:

答案 0 :(得分:1)

ms-appx-web不起作用,因为它只能用于从应用程序包加载资源。

我尝试了ms-appdata,然后搜索了documentation,结果发现:

  

WebView不支持ms-appdata方案,尽管它确实如此   支持ms-appx-web方案,您可以使用它来加载内容   您的应用包中的文件。

解决方法是读取字符串中的文件内容,然后使用WebView.NavigateToString()。 如果你有html的外部资源,你也可以探索NavigateToLocalStreamUri()。

答案 1 :(得分:1)

这会帮助你...... https://code.msdn.microsoft.com/windowsapps/XAML-WebView-control-sample-58ad63f7/

我的例子:

StorageFolder d = await ApplicationData.Current.LocalFolder.CreateFolderAsync("folder", CreationCollisionOption.OpenIfExists);
StorageFile f = await d.CreateFileAsync("index.html", CreationCollisionOption.ReplaceExisting);
Stream str = await f.OpenStreamForWriteAsync();
using (StreamWriter sw = new StreamWriter(str))
{
  sw.Write("<html>...</html>");
}
string url = "ms-appdata:///local/folder/index.html";
webView1.Navigate(new Uri(url));

答案 2 :(得分:1)

澄清NeoSvet的答案:ms-appdata仅在您将html文件存储在LocalFolder的子文件夹中,但不在根目录中时才有效,如下所示:"ms-appdata:///local/[subfolder_name]/index.html"

详细描述了here的原因,简而言之:它是为了为Web内容提供某种程度的隔离,以便WebView不会意外地暴露本地文件夹中的其他内容。