Примечание:
Об этом сообщалось ранее в № 7711 и, вероятно, в № 6152, но неправильно закрыто как исправленное или неактуальное.
Конфигурация:
Действия по воспроизведению проблемы:
Прецедент
https://kleins05.github.io/pdf.js/test-ieiframe/
(загрузить в IE11, нажать кнопку печати, проверить вывод на печать)
Каково ожидаемое поведение?
PDF-файл в iframe должен быть распечатан.
Что пошло не так?
Окружающая страница будет напечатана.
Поддержка печати в 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. , и вынуждает участников тратить много времени на поддержку практически мертвого браузера.)
Самый полезный комментарий
Я нашел причину. В отличие от других браузеров, window.print в IE заставляет печатать текущую сфокусированную рамку/окно, не обязательно тот, на который ссылается
window
. Использование document.execCommand позволяет избежать этого.В web/pdf_print_service.js:187 вместо print.call(window); использовать:
Если вы готовы принять запрос на вытягивание, несмотря на вашу ограниченную поддержку IE11, я готов его создать. Дайте мне знать.