Firefox 19 печатает PDF из JavaScript

У меня есть кнопка "Печать", которая вызывает следующий JavaScript

window.frames.myPdfFrame.print();

где "myPdfFrame" относится к iframe с PDF для src.

В Chrome и Firefox 18 (и ниже) открывается диалоговое окно печати, как ожидалось, но с Firefox 19 я получаю следующую ошибку

Error: Permission denied to access property 'print'

Я предполагаю, что это связано с использованием встроенного PDF-редактора выпущенного с Firefox 19, а не плагина Adobe. Использование значка печати на панели инструментов PDF-плагина работает так, как ожидалось.

Есть ли способ вызвать диалог печати встроенного PDF в Firefox 19 из Javascript?

Ответ 1

Я попробовал предоставленную JSFiddle demo с Firefox 22 и NoScript. Интересно, что когда я впервые открыл скрипку, содержимое iframe было заблокировано NoScript, но диалог печати легко появился! Я щелкнул "Хорошо", и у меня появился тост на панели задач, говорящий, что документ about.blank был отправлен на принтер. Конечно, я проверил принтер, и он выплюнул красивую белую страницу. Не полезно...

Теперь, после указания NoScript на "временно разрешить" домен PDF (irs.gov), я воспроизвожу ошибку:

Error: Permission denied to access property 'print'

Этот другой вопрос заставлял меня задаться вопросом, была ли проблема той же политики происхождения. Поэтому я тестировал его на своем собственном веб-сервере с помощью документа PDF, размещенного на той же машине. И... нет кубиков!

Затем я попробовал свою тестовую страницу в IE 9 и Chrome. Оба они отображают диалог печати, но когда я печатаю документ, в случае IE 9 он фактически печатает около: blank, а Chrome печатает серый прямоугольник с надписью "Загрузка"... похоже, что он печатает всю страницу, а не только документ в iframe.

Итак, я согласен с Джейсоном Сперском, что это не представляется возможным.

UPDATE: этот ответ предлагает решение, которое "просто работает", но только для файлов PHP, созданных Библиотека Fpdf...

Ответ 2

В последних версиях Firefox (с 19) вы должны отключить прослушиваемый и собственный просмотрщик PDF (pdf.js) в about:config. Установите для свойства pdfjs.disabled значение true, и вы увидите окно печати, отображаемое с помощью script.

Если запускается загрузка, установите для свойства plugin.disable_full_page_plugin_for_types значение application/pdf.

Ответ 3

Попробуйте использовать следующий код:

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