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

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01




Search

Go

Ce blog

Abonnements