Un bug dans IE rendra cette page… non-imprimable !
J’ai ce matin découvert un bug dans IE qui n’est pas sans intérêt.
Bien peu de gens le savent, mais l’apercu avant impression d’IE est fait en HTML + JScript (si si je vous assure) armé d’un composant ActiveX. Cette “page” a bien sûr plus de droits que la moyenne vu qu’il lui est possible de lire, copier et modifier le contenu de toutes les frames, … de la page à imprimer. Mais cela reste du JavaScript qui peut parfois se laisser berner par quelques comportements plutôt inattendus d’IE !
L’astuce, quoi que très simple, consiste à ajouter à votre document une balise (iframe fonctionne, je n’ai pas essayé d’autres type de balises) avec “body” pour IE.
Lorsque l’opération de copie se déroulera, aucun problème, un document “annexe” sera bien créé avec votre document (l’apercu sera donc possible) mais lors de l’étape d’impression, des vérifications sont faites sur le document (copié) pour en déterminer le type, …
Un de ses étapes vérifie document.body. Le problème, est que document.body renvoie votre IFRAME (document copié) et pas le vrai body. Cela fait planter le script d’impression et au lieu d’imprimer le document, IE vous renvoie un joli message d’erreur.
Voici un testcase, qui normalement devrait fonctionner :
Votre dévoué,
Fremy
PS : Le bug a été repporté dans le forum Microsoft adéquat, mais je doute que le problème soit un jour résolu car on m’a juste conseillé de ne pas utiliser body comme id, ce que je pouvais déjà faire avant de poster le bug
PS2 : Il n’est pas conseillé d’utiliser ce bug pour empecher l’utilisateur d’imprimer un document ! Si vous souhaitez faire cela, utilisez plutot une feuille de style spéciale pour le media print et effacer la page d’un HTML { display: none !important; } HTML::after { content: ‘Non imprimable’ }. N’oubliez pas non plus qu’une capture d’écran reste toujours possible !
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
François REMY est un jeune développeur belge plein d'entrain qui traite surtout des technologies du web et de DotNet dans ses articles.