2010-09-29 7 views
1

Afin de faciliter l'impression, je génère dynamiquement un iFrame, puis je le remplis avec du contenu. Cela fonctionne sur IE6, IE8, Chrome et Firefox sur PC et Mac. Le problème est pour une raison quelconque, il ne fonctionne pas correctement sur IE7.IE7 n'affiche pas les images générées dynamiquement iFrame

Dans IE7, les images ne s'affichent pas; à la place, ils montrent des images brisées. Même résultat lors de la visualisation. C'est étrange parce que comme je l'ai dit, ça fonctionne bien dans IE6 et IE8.

Des idées? J'ai posté une copie abêtis here

Voici le code source (comme on le voit dans l'exemple):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" /> 
<title>iframe print test</title> 
<script type="text/javascript" src="jquery-1.4.2.min.js"></script> 
<script type="text/javascript"> 
function printIFrameFunc(id) 
{ 
    var iframe = document.frames ? document.frames[id] : document.getElementById(id); 
    var ifWin = iframe.contentWindow || iframe; 
    iframe.focus(); 
    ifWin.print(); 
    return false; 
} 

function printfra() { 
    $("iframe#printIFrame").remove(); 
    // Create an iframe which will be populated with the data to be printed... 
    $('body').append('<iframe id="printIFrame"></iframe>'); 
    // !!! This next line commented so the iframe will be visible on the screen 
    //$("iframe#printIFrame").attr('style','position:absolute;left:-500px;top:-500px;'); 

    // Don't do anything on the iframe until it's ready to go 
    if ($.browser.webkit) 
     $("iframe#printIFrame").ready(iframeloadedprint); 
    else 
     $("iframe#printIFrame").load(iframeloadedprint); 

    function iframeloadedprint() {   
     var printBody = $("iframe#printIFrame").contents().find('body'); 
     printBody.html($("#mainContainer").html()); 
     printIFrameFunc('printIFrame'); 
    } 
    return false; 
} 
</script> 
</head> 

<body> 
     <div id="mainContainer"> 
     <img src="dash.png" alt="test image" /> 
     <a href="#" onclick="printfra();">Click here to print</a> 
    </div> 
</body> 

Toute aide ou suggestion serait grandement appréciée!

Répondre

0

Donc, je ne pouvais pas vraiment comprendre cela. J'ai fait un travail en mettant en œuvre une méthode d'impression différente. Comme je ne pouvais pas vraiment profiter d'une feuille de style spéciale pour l'impression, j'étais capable de faire un changement pour accommoder. Fondamentalement, lorsque l'utilisateur clique sur le bouton "imprimer", le javascript teste quel navigateur il est. Si c'est IE7, il suit un chemin spécial. Si c'est autre chose, il utilise la méthode iframe. Le chemin spécial d'IE7 consiste essentiellement à faire un tas de changements à la page en direct, en appelant l'impression, puis en annulant les modifications. J'ai essayé cela au début, mais j'ai trouvé que cela ne fonctionnait que dans IE. IE prendrait un instantané de la page pour l'impression au moment où l'impression a été appelée. Cependant, Firefox et Chrome prenaient leur instantané lorsque vous cliquiez sur OK pour imprimer, de sorte que tout ce que vous avez fait avant que l'impression n'arrive ne se produise.

Longue histoire courte, c'était ma solution de contournement. Pas trop joli, mais ça fait le boulot.