winrt:在webview中加载本地html及其资源

时间:2012-11-23 00:48:45

标签: webview microsoft-metro windows-runtime

我正在开发一个WinRT应用,我从Windows.Storage.ApplicationData.Current.LocalFolder加载本地HTML文件。我想知道加载HTML文件中嵌入的图像,音频,视频,CSS,JavaScripts等资源的最佳方式是什么。

目前,我正在Windows.ApplicationModel.Package.Current.InstalledLocation中编写这些文件,但是一旦从商店部署应用程序或通过Windows PowerShell安装AppPackage,这将不再可访问,除非您更改“ “Program Files / WindowsApps”文件夹指向当前用户或“Everyone”。

提前致谢。

1 个答案:

答案 0 :(得分:9)

我不确定你在这里问的是什么。唯一应该是Windows.ApplicationModel.Package.Current.InstalledLocation的文件是随AppPackage一起安装的文件,即应用程序分发的一部分。您的应用程序不应该(甚至不允许)在其中存储任何文件。

在运行时生成的任何文件都应存储在Windows.Storage.ApplicationData.Current.LocalFolderWindows.Storage.ApplicationData.Current.RemoteFolderWindows.Storage.ApplicationData.Current.TempFolder之一中,具体取决于您希望如何保留它们。这个规则的唯一例外是当您希望用户甚至从您的应用程序外部访问这些文件时 - 然后您应该将它们放在库中(并且需要访问它)或者使用文件选择器向用户询问位置

编辑:

加载本地HTML资源非常有限,除非它们与应用程序一起分发,即它们存储在InstalledLocation中并通过ms-appx-web协议访问。由于documentedWebView控件不支持ms-appdata协议,该协议用于从LocalStorageRemoteStorageTempFolder检索数据:

  

此外,WebView不支持ms-appdata:scheme   它确实支持ms-appx-web:方案。这使您可以加载   项目中的内容文件。

这或多或少会带走C#项目中的所有选项。你可以使用另一种HTML查看器控件,但我知道only one,它甚至还没有完成。

在JavaScript中情况稍微好一点。 ms-appdata协议为supported only for data files

  

有时引用您下载的资源很有用   互联网到您应用的本地ApplicationData存储(通过Windows   运行时API)。要引用此类内容,您必须使用该方案   “ms-appdata:”,包含ApplicationData中文件的路径   本地存储。请注意,出于安全原因,您无法导航到   您已下载到此位置的HTML,但无法运行任何HTML   可执行或可执行的代码,例如脚本或CSS。它   适用于图像或视频等媒体。

这意味着您可以:

<img src="ms-appdata:///local/img/coal.jpg" />

但不是:

<iframe src="ms-appdata:///local/index.html" />

ms-appdata协议语法为well documented,以防您仍然可以使用它。