Pdf.js: A impressão de iframe no IE11 imprime a página ao redor em vez do documento

Criado em 22 mai. 2019  ·  3Comentários  ·  Fonte: mozilla/pdf.js

Observação:
Isso foi relatado antes em #7711 e provavelmente em #6152, mas fechado incorretamente como corrigido ou não relevante

Configuração:

  • Navegador da Web e sua versão: IE 11.0.9600.19356, versão de atualização 11.0.125
  • Sistema operacional e sua versão: Windows 7
  • Versão do PDF.js: 2.0.943
  • É uma extensão do navegador: não

Etapas para reproduzir o problema:

  1. Carregar visualizador no iframe
  2. Acione uma impressão usando javascript na página principal (iframe.contentWindow.print())

Caso de teste
https://kleins05.github.io/pdf.js/test-ieiframe/
(carregue no IE11, clique no botão de impressão, verifique a saída de impressão)

Qual é o comportamento esperado?
O PDF no iframe deve ser impresso.

O que deu errado?
A página circundante é impressa.
Screen Shot 2019-05-22 at 13 21 01

Comentários muito úteis

Encontrei o motivo. Ao contrário de outros navegadores, window.print no IE faz com que o quadro/janela focado no momento seja impresso, não necessariamente aquele ao qual window se refere. Usar document.execCommand evita isso.

Em web/pdf_print_service.js:187 em vez de print.call(window); usar:

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

Se você aceitar uma solicitação pull apesar do suporte limitado ao IE11, estou disposto a criar uma. Avise.

Todos 3 comentários

O suporte de impressão no IE11 é limitado em geral, além disso, consulte a seção relevante do FAQ :

Embora a biblioteca e o visualizador padrão ainda devam funcionar no IE 11/Edge (não baseado no Chromium) por enquanto, algumas funcionalidades/recursos podem não estar disponíveis e o desempenho será pior em comparação com os navegadores modernos. No futuro, apenas bugs que impeçam completamente a execução da biblioteca e/ou do visualizador padrão serão aceitos.

Encontrei o motivo. Ao contrário de outros navegadores, window.print no IE faz com que o quadro/janela focado no momento seja impresso, não necessariamente aquele ao qual window se refere. Usar document.execCommand evita isso.

Em web/pdf_print_service.js:187 em vez de print.call(window); usar:

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

Se você aceitar uma solicitação pull apesar do suporte limitado ao IE11, estou disposto a criar uma. Avise.

Se você aceitar um pull request apesar de seu suporte limitado ao IE11,

Infelizmente, nunca aceitamos "hacks" de compatibilidade colocados na base de código principal, por vários motivos, como legibilidade/manutenção/desempenho, e esses sempre foram restritos a polyfills colocados em https://github.com/mozilla/pdf .js/blob/master/src/shared/compatibility.js

Além disso, neste momento, um bug precisa impedir o uso da biblioteca no IE11 para ser considerado válido. (Espere uma versão futura do PDF.js, que ainda será decidida até onde eu sei, para marcar o IE11 como explicitamente sem suporte e remover o pouco código de compatibilidade que resta. Historicamente, tentar oferecer suporte ao IE11 restringiu a capacidade de usar recursos JavaScript modernos , e forçou os contribuidores a gastar muito tempo dando suporte a um navegador essencialmente morto.)

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

azetutu picture azetutu  ·  4Comentários

patelsumit5192 picture patelsumit5192  ·  3Comentários

hp011235 picture hp011235  ·  4Comentários

SehyunPark picture SehyunPark  ·  3Comentários

smit-modi picture smit-modi  ·  3Comentários