web-dev-qa-db-fra.com

Impossible d'imprimer le contenu d'iframe à partir de la page parente dans IE 11

Ci-dessous, le code javascript qui fonctionnait correctement pour moi sous IE 8 sous Windows XP. 

<script type="text/javascript">
    function printFrame(frameId) {
       var iframe = $('#'+frameId)[0]; 
       iframe.contentWindow.focus(); 
       iframe.contentWindow.print(); 
    }
</script

La fonction ci-dessus est appelée puis le bouton "Imprimer le cadre" est cliqué dans la page parente.

<iframe id="testFrame" src="" name="testFrame"> </iframe>

<input type="button" onclick="printFrame('testFrame')" value="Print Frame"/>

Récemment, j'ai mis à niveau ma machine vers Windows 7 et IE 8 à IE 11.

Maintenant, cette même fonction ne donne pas le résultat attendu de l’impression du contenu de l’iframe. J'ai testé cela en chrome v34, firefox 30. Cela semble fonctionner avec eux sauf en IE 11.

Lors de mes recherches, j’ai constaté que, lorsque iframe src est défini de manière dynamique, iframe.contentWindow ne renvoie pas l’objet window iframe excepté.

J'ai essayé d'utiliser window.print () dans le fichier jsp d'iframe. Cela semble fonctionner si le code source n'est pas modifié de manière dynamique. Mais je dois modifier le contenu d'iframe pour qu'il soit défini de manière dynamique en fonction de la sélection effectuée dans une autre liste déroulante de la page parent. 

Par exemple, vérifiez le lien ci-dessous dans IE 11.

http://plungjan.name/SO/testprintiframe.html

La première fois, le lien imprime le contenu sur iframe. Ensuite, cliquez sur le bouton. Cela se traduit par l'envoi de la fenêtre parente à l'imprimante au lieu du contenu de l'iframe. 

Ensuite, j'ai essayé une autre méthode. Écrit le code ci-dessous dans le fichier iframe jsp et tente d'y accéder à partir de la page parent. Je n'ai pas pu accéder à la méthode elle-même. "code de script dans iframe jsp"

<script type="text/javascript">
    function printFrame() {
       window.print();
    }
</script

"code de script dans le parent jsp"

Essayez 1:

<script type="text/javascript">
    function printMyFrame(frameId) {
        var iframe = $('#'+frameId)[0]; 
        $(iframe).contents().printFrame();
    }
</script

Essayez 2: 

<script type="text/javascript">
    function printMyFrame(frameId) {
       setTimeout(function() {
          window.frames[frameId].contentWindow.printFrame();
        }, 200);
     }
</script>

J'ai cherché et mis en œuvre presque toutes les méthodes trouvées dans la recherche google pour accéder à la fenêtre iframe au lieu de la fenêtre parent. Mais vous n’avez pas pu imprimer le contenu de l’iframe avec IE 11. 

Veuillez me guider pour imprimer le contenu de l'iframe dans IE 11. 

11
Prasanna

J'ai eu un problème similaire récemment et a constaté que cette méthode était nécessaire

var target = document.getElementById('print-container');
        try {
            target.contentWindow.document.execCommand('print', false, null);
        } catch(e) {
            target.contentWindow.print();
        }
         });
38
Justine Pocock

Cela a fonctionné pour moi

cela fonctionne dans ie, chrome et firefox

var result = contentWindow.document.execCommand('print', false, null);

if (!result)
contentWindow.print();
14
Nayas Subramanian

C’est en gros un rappel des réponses ci-dessus (Nayas Subramanian) dans un jsFiddle - mais la sécurité ne lui permet pas de fonctionner à stackoverflow 100% ...

$('#print').click(function ()
{
    var contentWindow = document.getElementById("frameContent").contentWindow;
    var result = contentWindow.document.execCommand('print', false, null);
    if(!result)  contentWindow.print();
});
iframe {
width:100%;
height:100%;
border: none;
}
#print {
position:absolute;
left:20px;
top: 20px;
font-size: 20px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<iframe id="frameContent" name="frameContent" src="https://stackoverflow.com/questions/24673024/unable-to-print-iframe-content-from-parent-page-in-ie-11#"></iframe>
<button id="print">Print</button>

2
Andre Nel

On dirait que iframe ne peut pas être imprimé via JavaScript sur IE11. J'ai essayé plusieurs méthodes et j'ai échoué. Ce link dit la même chose.

1
bond

Le code suivant fonctionne pour moi dans IE 10 et IE 11

var browserName = navigator.userAgent.toLowerCase();
if ( browserName.indexOf("msie") != -1) {
    window.document.getElementById('pdfFrame').print();
} else if(browserName.indexOf("trident") != -1) { //IE 11
    window.document.getElementById('pdfFrame').contentWindow.document.execCommand('print', false, null);
}
0
user5100277