8

Cette solution fonctionne correctement dans Firefox 3.0+, mais IE8/7 imprime simplement toute la page, pas l'iframe spécifique.Impression d'un iFrame caché dans IE

C'est la fonction qui est appelée lorsque le lien d'impression est cliqué:

var printfunc= function(){ 
    var url = http://someurl.aspx; 
    //This iFrame has style="visibility: hidden; position: absolute; left: -9000px;" 
    var printIFrame = GetObj('PrintIFrame'); 
    printIFrame.src = url; 
} 

Le ASPX qui est chargé dans l'iframe caché appelle la fonction d'impression sur le gestionnaire d'événements onload:

<body onload="PrintJS.Print();"> 

La fonction d'impression:

this.Print = function(){ 
     self.focus(); 
     self.print(); 
     return false; 
} 

J'ai aussi essayé avec « fenêtre » au lieu de "soi". Les deux solutions fonctionnent bien dans FF mais IE ne semble pas avoir la bonne portée. Des pensées? Une solution cross-browser serait géniale! En outre, je préfère utiliser les styles d'impression CSS, mais le contenu que j'imprime est différent de celui de la page, d'où la nécessité de charger du HTML dans un iframe caché.

+1

Est-ce à une imprimante secrète que personne ne connaît? (désolé, n'a pas pu résister :)) – KristoferA

Répondre

20

Solution: un dans IE, iframe avec visibilité: caché; provoque l'affichage du parent par le navigateur. Changer les styles en hauteur: 0px; largeur: 0px; corrige ce problème.

+0

Que faire si nous allons utiliser 'display: none;' au lieu de 'visibility: hidden;'? Dans ce cas, nous n'avons pas besoin de définir la hauteur et la largeur. – Debiprasad

+0

J'ai le même problème avec 'display: none;' Cependant, si je place la hauteur et la largeur à 0, puis basculer l'affichage, faire le '.focus()' suivi par le '.print()' puis basculer le afficher à nouveau, cela fonctionne bien. – gattsbr

0

Essayez document.parentWindow.print(); au lieu de self.print() ...

2

Parent Document:

<!doctype html> 
<html> 
    <head> 
     <script> 
     function printIframe(iframe_id) { 

      if (navigator.appName.toUpperCase() == 'MICROSOFT INTERNET EXPLORER') { 
       document.frames[iframe_id].focus(); 
       document.frames[iframe_id].print(); 
      } else { 
       window.frames[iframe_id].focus(); 
       window.frames[iframe_id].print(); 
      } 
     } 
     </script> 
    </head> 
    <body> 
     <a href="javascript:printIframe('printMe');">Print the iframe.</a> 
     <iframe id="printMe" src="iframe.html"></iframe> 
    </body> 
</html> 

iframe document:

<!doctype html> 
<html> 
    <head></head> 
    <body> 
     <p>Print this.</p> 
    </body> 
</html> 

À partir du lien ci-dessous: http://www.eggheadcafe.com/PrintSearchContent.asp?LINKID=449

+0

cela a fonctionné pour moi! Merci. – Pons

+0

Spoofing n'est pas si 2013 – Codebeat

+0

Pouvez-vous inclure les idées principales de la réponse ici? Les liens uniquement sont déconseillés. – Thomas