我有一个“打印”按钮,可以调用以下JavaScript
window.frames.myPdfFrame.print();
其中“myPdfFrame”指的是带有src的PDF的iframe。
在Chrome和Firefox 18(及以下版本)中,这会按预期打开打印对话框,但从Firefox 19开始,我收到以下错误
Error: Permission denied to access property 'print'
我认为这与使用embedded PDF viewer released with Firefox 19而不是Adobe插件有关。使用PDF插件工具栏中的打印图标可以正常工作。
有没有办法从Javascript调用Firefox 19中的内联PDF中的打印对话框?
答案 0 :(得分:5)
我尝试了提供的JSFiddle demo,Firefox 22 和NoScript 。有趣的是,当我第一次打开小提琴时,iframe的内容被NoScript阻止,但打印对话框很快就出现了!我点击“确定”,然后我得到一个任务栏吐司,说文件 about.blank 已发送到打印机。果然,我检查了打印机,它吐了一个漂亮的白页。没用......
现在,在告诉NoScript“暂时允许”PDF域名(irs.gov)之后,我重现了这个错误:
Error: Permission denied to access property 'print'
This other question让我想知道这是same origin policy的问题。所以我在自己的网络服务器上测试了它,并在同一台机器上托管了PDF文档。并且......没有骰子!
然后我在IE 9和Chrome中尝试了我的测试页面。他们两个都显示打印对话框,但是当我打印文档时,在IE 9的情况下,它实际上是打印:空白,Chrome打印出一个灰色矩形,上面写着“正在加载”...看起来它正在打印整个页面,而不仅仅是iframe中的文档。
所以,我同意Jason Sperske认为这似乎不可能。
更新:this answer提供“正常工作”的解决方案,但仅适用于Fpdf library生成的PHP文件...
答案 1 :(得分:2)
在最新版本的Firefox(自19年代)上,您必须在about:config
中禁用有问题的原生PDF查看器(pdf.js)。将pdfjs.disabled
属性设置为true
,您将看到使用您的脚本显示打印窗口。
如果开始下载,请将plugin.disable_full_page_plugin_for_types
属性设置为application/pdf
。
答案 2 :(得分:1)
请尝试以下代码,它正在运行:
window.frames.myPdfFrame.focus();
window.print();