Eu usei o <iframe> tag para incorporar um arquivo pdf.
<iframe id="iframepdf" src="files/example.pdf"></iframe>
Isto funciona bem no Chrome, IE8+, Firefox etc, mas por alguma razão, quando algumas pessoas estão a vê-lo no IE8, os ficheiros estão a ser descarregados em vez de serem incorporados. Eu sei que este browser está desactualizado mas é o browser padrão dentro do meu escritório e como tal, o website tem de ser desenhado para isso.
Alguém tem alguma ideia sobre o porquê disto estar a acontecer, como posso corrigi-lo ou então colocar uma mensagem de erro em vez de deixar os ficheiros descarregarem?
It's downloaded provavelmente porque não há o plug-in do Adobe Reader instalado. Neste caso o IE (não importa qual versão) não'não sabe como renderizá-lo e ele'irá simplesmente descarregar o ficheiro (o Chrome, por exemplo, tem o seu próprio renderizador de PDF incorporado).
Dito isto. iframe><
não é a melhor maneira de exibir um PDF (não esqueça a compatibilidade com navegadores móveis, por exemplo Safari). Alguns navegadores sempre abrirão esse arquivo dentro de um aplicativo externo (ou em outra janela do navegador). A melhor e mais compatível maneira que encontrei é um pouco complicada, mas funciona em todos os navegadores que tentei (até mesmo bastante desatualizado):
Mantenha seu <iframe>
mas não exiba um PDF dentro dele, ele'será preenchido com uma página HTML que consiste de um <object>
tag. Crie uma página HTML para o seu PDF, ela deve ser parecida com _ isto:
<html>
<body>
<object data="your_url_to_pdf" type="application/pdf">
<embed src="your_url_to_pdf" type="application/pdf" />
</object>
</body>
</html>
É claro que você ainda precisa do plug-in apropriado instalado no navegador. Dê uma olhada também em este post se você precisa suportar o Safari em dispositivos móveis.
1ª. Por que aninhar <embed>
dentro de <object>
? Você'vai encontrar a resposta aqui em SO. Ao invés de aninhar <embed>
tag você pode (deve!) fornecer uma mensagem personalizada para seus usuários (ou um visualizador embutido, veja o próximo parágrafo). Hoje em dia o <object>
pode ser utilizado sem preocupações e o <embed>
é inútil.
2º. Porquê uma página HTML? Para que você possa fornecer um fallback se o visualizador de PDF for't suportado. Visualizador interno, mensagens/opções de erro HTML simples e assim por diante...
It's complicado para verificar o suporte PDF para que você possa fornecer um visualizador alternativo para seus clientes, dê uma olhada no projeto PDF.JS, it's muito bom, mas a qualidade de renderização - para navegadores desktop - é't tão boa quanto um nativo renderizador PDF (eu não't vejo qualquer diferença nos navegadores móveis por causa do tamanho da tela, eu suponho).
Se o navegador tiver um plugin pdf instalado, ele executa o objeto, se não usar o Google's PDF Viewer para exibi-lo como HTML simples:
<object data="your_url_to_pdf" type="application/pdf">
<iframe src="https://docs.google.com/viewer?url=your_url_to_pdf&embedded=true"></iframe>
</object>
**Iquadro***
<iframe id="fred" style="border:1px solid #666CCC" title="PDF in an i-Frame" src="PDFData.pdf" frameborder="1" scrolling="auto" height="1100" width="850" ></iframe>
**Objecto***
<object data="your_url_to_pdf" type="application/pdf">
<embed src="your_url_to_pdf" type="application/pdf" />
</object>