2013-09-26 43 views
0

我的Chrome打包应用程序包含PDF,我想让用户查看它。如果我在当前框架中打开它,则会显示错误“Chrome PDF查看器不允许”。如何从Chrome打包应用程序启动PDF?

坦率地说,铬PDF查看器是非常糟糕的,所以我宁愿让用户在他们的PDF查看器选择无论如何。如果我禁用了Chrome PDF插件(就像实验一样),并尝试使用chrome.app.window.open打开PDF,它会“下载”PDF,然后用户可以打开它。但是,这里有两个问题:

  1. 我不能切实让用户转到chrome://插件和做禁用
  2. 没有任何浏览器窗口,因此用户不知道下载发生了

有什么建议吗?打开嵌入在我的应用中的PDF是这款应用的必备功能。

+1

不幸的是,我尝试了所有我能想到的,但无济于事(我甚至尝试过dataURLs)。看起来像Chrome应用程序官方讨厌PDF文件。对我而言,唯一的“解决方案”是将文件托管在服务器上,并打开指向该文件的浏览器窗口(本地托管的任何内容),即'window.open(“http://my.domain.com/路径/到/ sample.pdf“);'。 – gkalpak

+0

感谢您的尝试!我可以使用它作为解决方法,直到Chrome一起行动。也许我会把它称为一个功能,因为它意味着大胖子PDF不需要负担应用程序。 –

回答

0

我已经得到了这个工作,但是对于你来说它是否是一个解决方案取决于你的用例。该解决方案由三部分组成:

  1. 使用pdfjs进行实际渲染。

要在打包的应用程序中运行此操作,您需要对国际化支持采取一些暴力行为。甚至在你这样做后,你会发现一些PDF无论如何都拒绝加载。所以不要费心尝试使pdfjs在打包的应用程序中工作。只需:

  1. 将您的整个应用放入一个带有持久分区的<webview>,并使用HTML5缓存清单让所有文件都可用于脱机查看。

是的,是的,我知道缓存清单不再酷。但是,如果您可以列出所有文件以便在打包应用程序中使用,那么您正在执行缓存清单实际上效果很好的一种情况。

  1. 然后使用一个打包的应用程序在web页面中分布一个小包装。

您还可以获得这样的好处,即您不必重写应用程序即可在严苛的打包应用程序规则(eval,sync xhr,2GB限制等)中生活。

您可以在m.kaon.com/c/ka上看到一个工作示例(使用Chrome访问桌面应用程序;如果您使用Firefox访问该应用程序,则可以访问正在使用的托管应用程序同样的技巧)。 PDF在底部“为什么选择Kaon”部分。

1

我已经看过这个广泛的,并得出结论,没有办法让Chrome应用程序打开本地的PDF。我也尝试过数据URI。

我不认为这个问题是在窗口中的PDF支持,因为它仍然是Chrome或PDF的大小。相反,我认为这只是一个工程问题,有一天可能会得到解决。

至于我,我在我的Chrome应用程序中构建PDF。由于我无法显示它,并且没有服务器上传它,我将它写入用户选择的文件并让用户自己处理。

+1

您可以使用[PDF.js](https://github.com/mozilla/pdf.js)来呈现PDF。 –

+1

有趣的...谢谢你的提示。但是,看起来我必须非常熟悉代码才能将其嵌入到Chrome应用中。它看起来是为Chrome扩展程序设置的。不过,要注意一些事情。 –

+0

我的假设是这个限制现在是有意的。他们对于成为攻击媒介的应用程序感到非常偏执,并且他们不相信自己的PDF渲染代码足以支持它。如果有办法打开一个带有安全沙箱的新窗口,那我可能会解决这个问题。 –

相关问题