web-dev-qa-db-fra.com

window.print () ne fonctionne pas dans IE

Je fais quelque chose comme ça en javascript pour imprimer une section de ma page en cliquant sur un lien

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

Cela fonctionne très bien dans Firefox mais pas dans IE.

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

62
Pankaj

Ajoutez 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 ...

131
Pratik

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

10
Ted
function printDiv() {
    var divToPrint = document.getElementById('printArea');
    newWin= window.open();
    newWin.document.write(divToPrint.innerHTML);
    newWin.location.reload();
    newWin.focus();
    newWin.print();
    newWin.close();
}
8
sarkiroka

J'ai déjà eu ce problème auparavant, et la solution consiste simplement à appeler window.print () dans IE, par opposition à l'appel à partir de l'instance de window:

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

ajouter une condition de vérification pour la charge

if (newWinObj.onload) {
    newWinObj.onload = function() {
        newWinObj.print();
        newWinObj.close();
    };
}
else {
    newWinObj.print();
    newWinObj.close();
}
3
Derin
<!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>
3
Luyao Chang

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

window.open() 

causes

window.document

être indéfini. 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, j'ai donc dû créer une réponse.

3
Clinton Chau

Attendez un peu avant de fermer la fenêtre!

if (navigator.appName != 'Microsoft Internet Explorer') {
    newWin.close();
} else {
    window.setTimeout(function() {newWin.close()}, 3000);
}
3
Greg

La manière dont nous gérons l’impression consiste à ouvrir la nouvelle fenêtre avec tout ce qui doit être envoyé à l’imprimante. Ensuite, nous avons réellement l'utilisateur cliquer sur le bouton Imprimer de leur navigateur.

Cela a toujours été acceptable dans le passé et cela évite les restrictions de sécurité dont parle Chilln.

2
NotMe

On m'a dit de faire document.close après document.write, je ne vois ni comment ni pourquoi, mais cela a obligé mon script à attendre jusqu'à ce que je ferme la boîte de dialogue d'impression avant d'exécuter 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();
2
mpaquette

Fermez la fenêtre seulement quand ce n'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();
}
2
kiatng

Cela a fonctionné pour moi, cela fonctionne dans firefox, c.-à-d. 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();
2
Nayas Subramanian

Pour Firefox utiliser

iframewin.print()

pour IE utiliser

iframedocument.execCommand('print', false, null);

voir aussi Impossible d'imprimer un iframe sur IE en utilisant JavaScript, affiche la page parent à la place

2
Michael Gärtner

Je ne suis pas sûr, mais je pense que cela se produit à cause des règles de sécurité d'InternetExplorer ...

Si vous appelez une fonction telle que print (), il demande manuellement à l'utilisateur s'il souhaite autoriser les scripts actifs. S'il clique sur la barre jaune et sélectionne "Oui", la boîte de dialogue Imprimer apparaît. Si vous cliquez sur 'Non' ou si vous ne faites rien, cela n'exécutera pas les parties considérées comme des scripts actifs ou d'autres fonctions javascript utiles pour la sécurité.

Dans votre exemple, la fenêtre est ouverte, puis print () est appelé, une barre de confirmation apparaît (rien n'est sélectionné, en fait, rien ne peut être sélectionné en raison du temps très court), 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 connais pas grand chose aux politiques de sécurité d'InternetExplorer.

J'espère que cela t'aides

2
Chilln

Je suis aussi 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, là encore, des problèmes persistent concernant le contenu de la page.

Vous pouvez ouvrir la page en utilisant window.open et écrire le contenu de cette page. alors la fonction d'impression fonctionnera dans IE. C'est une solution alternative.

Meilleure chance.

@Pratik

1
Pratik
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
Venki WAR