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 !

Publié vendredi 18 juillet 2008 15:33 par FREMYCOMPANY
Classé sous ,
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 :

Commentaires

# re: Un bug dans IE rendra cette page… non-imprimable ! samedi 19 juillet 2008 10:12

De toutes façons, il est inutile d'utiliser cette technique pour empêcher d'imprimer un document, car, dans l'absolu, sans tenir compte d'un ActiveX, il est imprimable par firefox et safari. J'ai essayé...

A mon avis, il doit s'agir d'un problème au niveau des ActiveX, puisque les deux autres navigateurs, ignorant ces derniers, arrivent à imprimer la page, même si le résultat est parfaitement incomplet. (Au moins, il n'y a pas de plantage violent, pourrait-on remarquer... :-))) )

Tukkkko

# re: Un bug dans IE rendra cette page… non-imprimable ! samedi 19 juillet 2008 12:40

Le problème, ce n'est pas un ActiveX.

Dans le javascript de preview.js, il y a un appel à un document "copié" de l'original qui fait "document.body.tagName.toUpper()".

Le problème, c'est qu'à cause de l'iframe, document.body retourne en fait le contentWindow de l'iframe, qui n'a pas de properiété "tagName" et donc undefined.toUpperCase() génère une erreur.

La page pourrait s'imprimer, c'est une bête ligne de JScript qui foire...

FREMYCOMPANY


Les 10 derniers blogs postés

- Solution Template et Project Template dans Visual Studio par Atteint de JavaScriptite Aiguë [Cyril Durand] le il y a 1 heure et 7 minutes

- PocketIE et Assignation du SRC d'un Element IMG par Jerome Laban le il y a 1 heure et 59 minutes

- Conversion de fichiers RAW en fichier JPEG avec WPF par Perspective le il y a 2 heures et 35 minutes

- Mise à Jour du Moteur de Recherche des Arrêts de Bus de Montréal par Jerome Laban le il y a 3 heures et 19 minutes

- [WPF] XPSReader v0.2 par Blog Technique d'Audrey PETIT le il y a 4 heures et 20 minutes

- Entity Framework : providers Oracle, MySQL et PostgreSQL par Matthieu MEZIL le il y a 10 heures et 55 minutes

- [WPF] Nouvel article sur c2i.fr par Richard Clark le 09-06-2008, 17:33

- F# nouvelle CTP 1.9.6.2 (update) par Pierrick's Blog le 09-06-2008, 13:27

- La suite ...Proposition de collaboration rédactionnelle entre les communautés de développeurs et Microsoft France par LucasR le 09-05-2008, 17:45

- [Fun] Votre simulateur de vol avec Microsoft ESP par Julien Chable le 09-05-2008, 12:02