如何在 Windows 8/Cordova 应用程序中打开本地 PDF?

How to open a local PDF in a Windows 8/Cordova app?

我有一个我构建的 IOS 应用程序,现在我的任务是将其移植到 Windows 8 以便在 Windows 平板电脑上使用。我的应用程序从 Dropbox 下载文件,这些文件存储在本地文件夹中。我可以看到所有这些工作正常。我可以通过在我的 img 标签的 src 中使用 ms-appdata:///local/" + filename 来引用图像,我什至可以使用 HTML5 视频标签播放同一文件夹中的 mp4。

我的问题是,对于我的 IOS 版本,我使用 Cordova 的 InAppBrowser 打开本地 PDF,但在这个 Windows 8 版本上,它不起作用。

我正在使用以下代码(filename 等于 [1]CaseStudy-AC_EN_04.pdf 并且它确实存在于文件系统中):

 var ref = window.open("ms-appdata:///local/" + filename, '_blank', 'location=no');

当我 运行 模拟器

时,我在 Visual Studio 中收到以下错误
APPHOST9607: The app can't launch the URI at ms-appdata:///local/[1]CaseStudy-AC_EN_04.pdf because of this error: -2147024846.

我已经尝试切换到 WinJS 编码方法,甚至尝试将 PDF 加载到 iFrame 中,但没有任何效果。如果必须的话,我不介意将用户踢出 Internet Explorer...我只需要某种方式让用户看到这些本地 PDF。这是权限问题吗?我只有一个 config.xml 文件而不是应用程序清单文件,所以我可能缺少设置?

有没有人有这方面的经验?

以防其他人遇到此问题。我能够用这个 WinJS 代码做我想做的事(确保你包含 WinJS 框架文件)

//this is just the filename, you can probably skip this step but my filenames are from downloaded files so they could be encoded.
fileName = decodeURIComponent(fileName);

//get the local folder that contains the downloaded files
var applicationData = Windows.Storage.ApplicationData.current;
var localFolder = applicationData.localFolder;

//grab the file and return a promise
localFolder.getFileAsync(fileName)
.then(function(file) {
     //launch the file - this command will let the OS use it's default PDF reader - win 8 app 'reader' works great.
     Windows.System.Launcher.launchFileAsync(file);
});    

就是这样。

@Matthew Corway 工作正常。 但是,当文件位于子文件夹中时需要额外注意,例如:

var fullPath = "\folderName\fileName.pdf"