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

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

- [Refactoring] ReSharper pour Visual Studio 2010 (Preview) par Thomas Jaskula le il y a 1 heure et 9 minutes

- [Refactoring] Analyser vos exceptions avec ReSharper Exceptional par Thomas Jaskula le il y a 2 heures et 23 minutes

- SharePoint 2007 : patterns & practices SharePoint Guidance par Philippe Sentenac [MVP SharePoint] le il y a 16 heures et 2 minutes

- [Visual Studio 2010] Les tests cases c’est bien, mais je vais devoir tout réécrire ? par Etienne Margraff le il y a 16 heures et 59 minutes

- MVP[Gribouillon].AddYear par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le il y a 17 heures et 14 minutes

- Clinique INSIA - Projet de fin d’Etudes (Silverlight 3 MVVM et OutOfBrowser, WCF, TFS) - Part 1 par David REI le 07-02-2009, 23:38

- C’est la crise ? Bah pourquoi cramer du budget pub alors ? par Nix's Blog le 07-02-2009, 15:31

- Soyons MVP ! par TheSaib .NET blog le 07-02-2009, 12:15

- SharePoint : Gestion des Erreurs 6398, 7076 et 6482 par Blog Technique de Romelard Fabrice le 07-02-2009, 11:53

- EF avec WPF par Matthieu MEZIL le 07-02-2009, 10:18