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 :
Publié 18 juillet 08 03:33 par FREMYCOMPANY
Classé sous : ,

Commentaires

# Tukkkko said on juillet 19, 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... :-))) )

# FREMYCOMPANY said on juillet 19, 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...

Les commentaires anonymes sont désactivés

About FREMYCOMPANY

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.


Les 10 derniers blogs postés

- [SharePoint] Les sessions TechDays 2012… par Le blog de Patrick [MVP SharePoint] le il y a 6 heures et 18 minutes

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le 02-09-2012, 11:01

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le 02-09-2012, 08:28

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59




Search

Go

Ce blog

Abonnements