Firefox 19使用JavaScript打印PDF

16
我有一个“打印”按钮,它调用以下JavaScript代码。
window.frames.myPdfFrame.print();

“myPdfFrame”是指带有PDF src的iframe。

在Chrome和Firefox 18(及以下版本)中,这将按预期打开打印对话框,但从Firefox 19开始,我会收到以下错误

Error: Permission denied to access property 'print'

我假设这与使用Firefox 19发布的嵌入式PDF查看器有关,而不是Adobe插件。在PDF插件工具栏中使用打印图标会按预期工作。
是否有一种方法可以从Javascript中调用Firefox 19中内联PDF上的打印对话框?

2
是的,我也这么认为,一个运行的示例可能有助于其他人深入研究这个。 - Jason Sperske
1
我认为这是不可能的。我找到的所有内容都显示您需要在iframe内定义一个打印函数,如果您的iframe的src是PDF,则没有此选项。 - Jason Sperske
刚在 Firefox 21 中尝试了一下,仍然出现相同的错误。 - Lee Meador
在最新的Firefox 23 beta版中确认存在问题。 - Trojan
Firefox 41.0.2(ubuntu)仍然无法正常工作。 - gorodezkiy
显示剩余4条评论
3个回答

5
我尝试了提供的 JSFiddle demo,使用 Firefox 22 和 NoScript。有趣的是,当我第一次打开这个demo时,iframe的内容被NoScript阻止了,但打印对话框很快就弹出了!我点击了“确定”,然后我得到了一个任务栏提示,说文档about.blank已经发送到打印机了。果然,我检查了打印机,它吐出了一张漂亮的白纸。不实用...

现在,在告诉NoScript“暂时允许”PDF(irs.gov)的域名之后,我重现了这个错误:

Error: Permission denied to access property 'print'

这个问题让我想到了同源策略的问题。所以我在自己的Web服务器上测试了一下,使用同一台机器上托管的PDF文档。但是...没有成功!

然后我在IE 9和Chrome中尝试了我的测试页面。它们确实显示了打印对话框,但是当我打印文档时,在IE 9的情况下,实际上是在打印about:blank,而Chrome则打印一个灰色的矩形,上面写着“正在加载”...看起来是在打印整个页面,而不仅仅是iframe中的文档。

所以,我同意Jason Sperske的看法,这似乎是不可能的。

更新:这个答案提供了一个“只需运行”的解决方案,但仅适用于由Fpdf库生成的PHP文件...


如果您设置一个超时(适当的长度...我不知道是多少),甚至有些人听取onload事件也无法解决Chrome的“加载中...”问题。 - Paul Draper

2
在最近的Firefox版本(自19版起),您需要在about:config中禁用有缺陷的本地PDF查看器(pdf.js)才能使用您的脚本。将pdfjs.disabled属性设置为true,即可看到打印窗口。如果出现下载开始,请将plugin.disable_full_page_plugin_for_types属性设置为application/pdf

也可以在这里找到:https://dev59.com/t3DYa4cB1Zd3GeqPAG3L - Josh Davis

1
请尝试以下代码,它是有效的:

Please try the following code, it's working:

window.frames.myPdfFrame.focus();
window.print();

对不起,这在IE 9和Firefox 22上对我都不起作用。 - Miklos Aubert

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