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仍然不起作用。
答案 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不会意外地暴露本地文件夹中的其他内容。