在Cordova中的Windows 8应用程序中显示本地文件夹中的PDF文件

3

我的应用程序下载PDF并将其存储在Windows 8应用的LocalState文件夹中。

我希望在用户单击链接时,应用程序能够显示该PDF。

我尝试使用window.open调用中的ms-appdata:///local/pdfs/filename.pdf显示它,还尝试了在cordova中使用InAppBrowser插件,但都没有成功。此外,我还尝试了以下方法:

var uri = new Windows.Foundation.Uri('ms-appdata:///local/pdfs/filename.pdf');
var file = Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri);
Windows.System.Launcher.launchFileAsync(file).done();

我知道文件存在,因为我得到了一个文件结果。只是不确定如何让用户查看它。

1个回答

2
设计上,Windows 上的本地应用数据文件夹只能被该应用或完全信任的桌面应用程序访问(其他平台上类似封闭的位置也可能是如此)。因此,使用 Launcher.launchFileAsync 启动的 Windows Store 应用程序将无法访问该位置(Webview 进程也无法访问,因为它也受到沙箱限制)。另一方面,如果启动了桌面应用程序,则很可能可以访问该文件,但是事先无法确定。总之,本地应用数据不是让其他应用程序访问文件的好位置。
您需要将文件保存在其他可供其他应用程序访问的位置。这里有两种方法,都需要一些用户交互以选择位置,以便他们可以将 PDF 放置在任何位置:
  1. 让用户为您的应用程序选择一个保存文件夹,他们可以在一次操作中完成。为此,您需要调用 FolderPicker,并将所选文件夹保存在 FutureAccessList 中。这样,您就可以让用户选择保存文件夹,从而授权您在那里保存,并通过在 FutureAccessList 中保存它,在后续会话中检索它,而无需再次询问用户。有关更多信息,请参见 File Picker SampleFile Access Sample

  2. 让用户为每个单独的文件选择保存位置,使用 FilePicker(请参见同一示例),如果您以后需要,还可以使用访问缓存来保存对这些单独位置的权限。

可能有 Cordova 插件也可以使用这些 API,但我还没有检查过。无论如何,一旦文件处于可访问位置,启动文件应该就能正常工作。

作为另一种解决方案,您可以考虑直接在应用程序中呈现 PDF。Windows 在 Windows.Data.Pdf 中提供了一个 API 来实现此功能,并附带一个相关示例。可能还有其他的插件或 JS 库也可以实现此功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接