3

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

目前,我正在将这些文件写入其中,Windows.ApplicationModel.Package.Current.InstalledLocation但是一旦从商店部署应用程序或通过 Windows PowerShell 安装 AppPackage,就无法再访问这些文件,除非您将“Program Files/WindowsApps”文件夹的所有权更改为当前用户或“所有人”。

提前致谢。

4

1 回答 1

9

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

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

编辑:

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

此外,WebView 不支持 ms-appdata: 方案,尽管它支持 ms-appx-web: 方案。这使您能够在项目中加载内容文件。

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

在 JavaScript 中,情况只是稍微好一点。ms-appdata协议仅支持数据文件

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

这意味着您可以执行以下操作:

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

但不是:

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

ms-appdata协议语法有据可查,以防您仍然会发现它的用途。

于 2012-11-23T05:55:16.873 回答