Pdf.js: Печать из iframe в IE11 печатает окружающую страницу вместо документа

Созданный на 22 мая 2019  ·  3Комментарии  ·  Источник: mozilla/pdf.js

Примечание:
Об этом сообщалось ранее в № 7711 и, вероятно, в № 6152, но неправильно закрыто как исправленное или неактуальное.

Конфигурация:

  • Веб-браузер и его версия: IE 11.0.9600.19356, версия обновления 11.0.125.
  • Операционная система и ее версия: Windows 7
  • Версия PDF.js: 2.0.943
  • Является расширением для браузера: нет

Действия по воспроизведению проблемы:

  1. Загрузить просмотрщик в iframe
  2. Запустить печать с помощью javascript с главной страницы (iframe.contentWindow.print())

Прецедент
https://kleins05.github.io/pdf.js/test-ieiframe/
(загрузить в IE11, нажать кнопку печати, проверить вывод на печать)

Каково ожидаемое поведение?
PDF-файл в iframe должен быть распечатан.

Что пошло не так?
Окружающая страница будет напечатана.
Screen Shot 2019-05-22 at 13 21 01

Самый полезный комментарий

Я нашел причину. В отличие от других браузеров, window.print в IE заставляет печатать текущую сфокусированную рамку/окно, не обязательно тот, на который ссылается window . Использование document.execCommand позволяет избежать этого.

В web/pdf_print_service.js:187 вместо print.call(window); использовать:

var result = window.document.execCommand('print', false, null);
if (!result) {
   print.call(window);
}

Если вы готовы принять запрос на вытягивание, несмотря на вашу ограниченную поддержку IE11, я готов его создать. Дайте мне знать.

Все 3 Комментарий

Поддержка печати в IE11 в целом ограничена, кроме того, пожалуйста, обратитесь к соответствующему разделу часто задаваемых вопросов :

Хотя библиотека и средство просмотра по умолчанию должны пока работать в IE 11/Edge (не на основе Chromium), некоторые функции/функции могут быть недоступны, а производительность будет хуже по сравнению с современными браузерами. В дальнейшем будут приниматься только те ошибки, которые полностью препятствуют работе библиотеки и/или средства просмотра по умолчанию.

Я нашел причину. В отличие от других браузеров, window.print в IE заставляет печатать текущую сфокусированную рамку/окно, не обязательно тот, на который ссылается window . Использование document.execCommand позволяет избежать этого.

В web/pdf_print_service.js:187 вместо print.call(window); использовать:

var result = window.document.execCommand('print', false, null);
if (!result) {
   print.call(window);
}

Если вы готовы принять запрос на вытягивание, несмотря на вашу ограниченную поддержку IE11, я готов его создать. Дайте мне знать.

Если вы готовы принять запрос на вытягивание, несмотря на ограниченную поддержку IE11,

К сожалению, мы никогда не принимали «хаки» совместимости, размещенные в основной кодовой базе, по разным причинам, например, для удобочитаемости/обслуживаемости/производительности, и они всегда ограничивались полифиллами, размещенными в https://github.com/mozilla/pdf .

Кроме того, на данный момент ошибка должна вообще препятствовать использованию библиотеки в IE11, чтобы считаться действительной. (Ожидайте, что в будущем выпуске PDF.js, решение о котором, насколько я знаю, еще не принято, он пометит IE11 как явно неподдерживаемый и удалит тот небольшой оставшийся код совместимости. Исторически попытка поддержать IE11 ограничивала возможность использования современных функций JavaScript. , и вынуждает участников тратить много времени на поддержку практически мертвого браузера.)

Была ли эта страница полезной?
0 / 5 - 0 рейтинги