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

时间:2015-02-25 03:23:22

标签: windows cordova pdf winjs

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

我在应用中有一个链接,我希望在用户点击它时显示PDF。

我已尝试在ms-appdata:///local/pdfs/filename.pdf调用中使用window.open显示它,我也尝试在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 个答案:

答案 0 :(得分:2)

按照设计,Windows上的本地appdata文件夹只能访问该应用程序或完全信任的桌面应用程序(这可能适用于其他平台上类似的沙盒位置)。因此,使用Launcher.launchFileAsync启动的Windows应用商店应用无法访问该位置(webview进程也无法访问沙盒)。另一方面,如果桌面应用程序启动了,它可能会访问该文件,但如果情况确实如此,您无法提前告知。最重要的是,本地appdata不是让其他应用程序获取文件的好地方。

您需要将文件保存在其他应用可访问的其他位置。这里有两种方法,这两种方法都需要一点用户交互来选择位置,因此他们可以将PDF放在任何他们想要的地方:

  1. 让用户为您的应用选择一个保存文件夹,他们可以执行一次。为此,您可以调用FolderPicker,并将所选文件夹保存在FutureAccessList中。这样,您可以让用户选择保存文件夹,授予您同意保存的权限,并通过将其保存在FutureAccessList中,您可以在后续会话中检索它,而无需再次询问用户。有关详情,请参阅File Picker SampleFile Access Sample

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

  3. 可能还有可以使用这些API的Cordova插件,但我还没有检查过。无论哪种方式,一旦文件位于可访问的位置,启动文件应该可以正常工作。

    作为替代解决方案,您可以考虑直接在应用中呈现PDF。 Windows在Windows.Data.Pdf中有一个API,associated sample。可能有一个插件或其他JS库也可以用于此。