2010-03-31 6 views
51

que je fais quelque chose comme ça en javascript pour imprimer une partie de ma page sur clic d'un lienwindow.print() ne fonctionne pas dans IE

function printDiv() { 
var divToPrint = document.getElementById('printArea'); 
var newWin = window.open(); 
newWin.document.write(divToPrint.innerHTML); 
newWin.print(); 
newWin.close(); 
} 

Il fonctionne très bien dans Firefox, mais pas dans IE.

Quelqu'un pourrait-il aider s'il vous plaît

Répondre

1

Je ne suis pas sûr, mais je pense qu'il se produit en raison des règles de sécurité du InternetExplorer ...

Si vous appelez une fonction comme l'impression(), il demande à l'utilisateur manuellement s'il veut autoriser le script actif, s'il clique sur la barre jaune et sélectionne 'Oui', la boîte de dialogue d'impression apparaît. Si vous cliquez sur "Non" ou que vous ne faites rien, il n'exécute pas les parties qui sont considérées comme des scripts actifs ou d'autres fonctions javascript pertinentes pour la sécurité.

Dans votre exemple, la fenêtre est ouverte, puis print() est appelée, la barre de confirmation s'affiche (rien n'est sélectionné, en fait rien ne peut être sélectionné en raison du peu de temps), newWin.close() est appelée, la fenêtre se ferme .

Vous devriez essayer d'ajouter la page aux sites de confiance dans InternetExplorer ou modifier les paramètres de sécurité.

Il peut y avoir un moyen de gérer les politiques de sécurité dans le javascript lui-même, mais je ne sais pas grand-chose sur les politiques de sécurité InternetExplorer.

Hope this helps

0

La façon dont nous traitons généralement l'impression est juste ouvrir la nouvelle fenêtre avec tout ce qui doit être envoyé à l'imprimante. Ensuite, l'utilisateur clique sur le bouton Imprimer de son navigateur.

Cela a toujours été acceptable dans le passé, et il contourne les restrictions de sécurité dont parle Chilln.

0

Fermer la fenêtre seulement quand il est pas IE:

function printDiv() { 
var divToPrint = document.getElementById('printArea'); 
var newWin= window.open(); 
newWin.document.write(divToPrint.innerHTML); 
newWin.print(); 
if (navigator.appName != 'Microsoft Internet Explorer') newWin.window.close(); 
} 
0

Je suis également confronté à ce problème. Problème dans IE est newWin.document.write (divToPrint.innerHTML);

lorsque nous supprimons cette fonction d'impression de ligne dans IE fonctionne. mais encore un problème existe encore sur le contenu de la page.

Vous pouvez ouvrir la page à l'aide de window.open et écrire le contenu dans cette page. alors la fonction d'impression fonctionnera dans IE. Ceci est une solution alternative.

Bonne chance.

@Pratik

111

Ajouter ces lignes après newWin.document.write(divToPrint.innerHTML)

newWin.document.close(); 
newWin.focus(); 
newWin.print(); 
newWin.close(); 

Ensuite, la fonction d'impression fonctionnera dans tous les navigateurs ...

+0

Merci beaucoup ... Ça marche pour moi. – PythonDev

+0

A travaillé pour moi aussi - gentil – JoshuaDavid

+4

Merci beaucoup. le manque de document.close() était la cause; – Ahmad

1

J'ai eu ce problème avant, et la solution est tout simplement appeler la fenêtre.print() dans IE, au lieu d'appeler print à partir de l'instance de la fenêtre:

function printPage(htmlPage) 
    { 
     var w = window.open("about:blank"); 
     w.document.write(htmlPage); 
     if (navigator.appName == 'Microsoft Internet Explorer') window.print(); 
     else w.print(); 
    } 
+0

Cette réponse faite il y a près d'un an m'a aidé.J'ai posté cette solution w.r.t à mes propres Q: http://stackoverflow.com/questions/13948313/how-to-print-a-pdf/13948819#13948819. Up voté. –

1

Attendez un peu avant de fermer la fenêtre!

if (navigator.appName != 'Microsoft Internet Explorer') { 
    newWin.close(); 
} else { 
    window.setTimeout(function() {newWin.close()}, 3000); 
} 
6
function printDiv() { 
    var divToPrint = document.getElementById('printArea'); 
    newWin= window.open(); 
    newWin.document.write(divToPrint.innerHTML); 
    newWin.location.reload(); 
    newWin.focus(); 
    newWin.print(); 
    newWin.close(); 
} 
1

On m'a dit de faire document.close après document.write, je ne vois pas comment ou pourquoi, mais cela a causé mon script d'attendre jusqu'à ce que je fermais la boîte de dialogue d'impression avant qu'il a couru mon window.close.

var printContent = document.getElementbyId('wrapper').innerHTML; 
var disp_setting="toolbar=no,location=no,directories=no,menubar=no, scrollbars=no,width=600, height=825, left=100, top=25" 
var printWindow = window.open("","",disp_setting); 
printWindow.document.write(printContent); 
printWindow.document.close(); 
printWindow.focus(); 
printWindow.print(); 

printWindow.close(); 
4

Ajouter newWin.document.close();, comme ceci:

function printDiv() { 
    var divToPrint = document.getElementById('printArea'); 
    var newWin = window.open(); 
    newWin.document.write(divToPrint.innerHTML); 
    newWin.document.close(); 
    newWin.print(); 
    newWin.close(); 
} 

Cela rend IE heureux. HTH, -Ted

1

Ajouter une condition pour vérifier onload

if (newWinObj.onload) { 
    newWinObj.onload = function() { 
     newWinObj.print(); 
     newWinObj.close(); 
    }; 
} 
else { 
    newWinObj.print(); 
    newWinObj.close(); 
} 
0

Cela a fonctionné pour moi, cela fonctionne dans firefox, ie et chrome.

var content = "This is a test Message"; 

    var contentHtml = [ 
     '<div><b>', 
     'TestReport', 
     '<button style="float:right; margin-right:10px;"', 
     'id="printButton" onclick="printDocument()">Print</button></div>', 
     content 
    ].join(''); 

    var printWindow = window.open(); 

    printWindow.document.write('<!DOCTYPE HTML><html><head<title>Reports</title>', 
     '<script>function printDocument() {', 
     'window.focus();', 
     'window.print();', 
     'window.close();', 
     '}', 
     '</script>'); 

    printWindow.document.write("stylesheet link here"); 

    printWindow.document.write('</head><body>'); 
    printWindow.document.write(contentHtml); 
    printWindow.document.write('</body>'); 
    printWindow.document.write('</html>'); 
    printWindow.document.close(); 
0
function functionname() { 

    var divToPrint = document.getElementById('divid'); 
    newWin= window.open(); 
    newWin.document.write(divToPrint.innerHTML); 
    newWin.location.reload(); 
    newWin.focus(); 
    newWin.print(); 
    newWin.close(); 
} 
0

Juste pour ajouter des informations supplémentaires. Dans IE 11, en utilisant simplement

window.open() 

provoque

window.document 

à undefined. Pour résoudre ce problème, utilisez

window.open(null, '_blank') 

Cela fonctionnera également correctement dans Chrome, Firefox et Safari.

Je n'ai pas assez de réputation pour commenter, je devais donc créer une réponse.

0
<!DOCTYPE html> 
<html> 
<head id="head"> 
<meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7; IE=EDGE" /> 
    <!-- saved from url=(0023)http://www.contoso.com/ --> 
    <link rel="stylesheet" type="text/css" href="style.css" /> 
</head> 
<body> 
<div> 
    <div> 
    Do not print 
    </div> 
    <div id="printable" style="background-color: pink"> 
    Print this div 
    </div> 
    <button onClick="printdiv();">Print Div</button> 
</div> 
</body> 
<script> 
    function printdiv() 
    { 
    var printContents = document.getElementById("printable").innerHTML; 
    var head = document.getElementById("head").innerHTML; 
    //var popupWin = window.open('', '_blank'); 
    var popupWin = window.open('print.html', 'blank'); 
    popupWin.document.open(); 
    popupWin.document.write(''+ '<html>'+'<head>'+head+'</head>'+'<body onload="window.print()">' + '<div id="printable">' + printContents + '</div>'+'</body>'+'</html>'); 
    popupWin.document.close(); 
return false; 
}; 
</script> 
</html> 
+0

Le nom du fichier est print.html –