2009-05-18 8 views
4

Dire que j'aien javascript comment puis-je détecter si un navigateur va afficher ou télécharger un pdf?

  • une page Web avec un iframe:
  • une URL pointant vers un document pdf: http://www.example.com
  • javascript qui fera iframe.src = pdfurl
  • un bouton qui déclencher de telles javascript

    • si le navigateur va afficher la ligne de pdf, le bouton dire "view pdf" et quand on clique dessus rendra le iframe visible

    • sinon il va dire "télécharger pdf"

J'ai trouvé un moyen de détecter wether le pdf a été chargé dans l'iframe: lire iframe.contentDocument.contentType après onload a tiré, mais

  • cela ne me permet pas d'afficher le bouton correct
  • onload ne se déclenche pas si le fichier est en cours de téléchargement

Merci :)

+1

Les utilisateurs ne comprennent pas la différence entre visualiser un fichier dans le navigateur et le télécharger quand même. IMO "View PDF" est bien dans les deux cas, car il va ouvrir dans leur visionneuse PDF ou plugin du navigateur. S'ils n'ont même pas de visionneuse, le navigateur/shell affichera un message "système ne peut pas afficher PDF", leur faisant comprendre qu'ils ont besoin de logiciels supplémentaires, que vous pourriez fournir avec l'un de ces "Get Adobe PDF" liens (bien que je préférerais Foxit Reader). Donc, je ne voudrais pas vraiment me tromper, parce que vous ne savez jamais quel plugin exactement l'utilisateur utilise et si elle est activée. – OregonGhost

+1

ressemble à une réponse, pas un commentaire – geowa4

Répondre

-1

Vous pouvez envoyer un HEAD request à cette ressource et vérifier ce que Content-Type et Content-Disposition valeurs sont renvoyés. En fonction de ces informations, vous pouvez déterminer si un navigateur affichera ou téléchargera cette ressource.

+0

Seulement si vous supposez que le navigateur aura un plugin d'affichage PDF installé et configuré pour être utilisé par défaut. Il trouve ces choses si irritantes que je tiens à les désinstaller ou à les bloquer. – Quentin

+1

Au meilleur de ma connaissance, Content-Type et Content-Disposition sont envoyés du serveur au client. Le serveur n'aura aucune connaissance des capacités du navigateur. Le serveur peut exploiter ces deux en-têtes pour forcer le navigateur à effectuer un téléchargement au lieu d'un affichage. –

5

Pour indiquer au navigateur du client de télécharger une réponse en tant que fichier, définissez l'en-tête HTTP Content-Disposition sur 'attachment' dans votre réponse. Ce n'est pas une garantie, mais c'est la bonne façon de dire au navigateur comment gérer le contenu.

Questions connexes