Quelqu'un peut-il m'aider s'il vous plaît à imprimer le contenu d'un IFrame via un appel javascript dans Safari/Chrome.
Cela fonctionne dans Firefox:
$('#' + id)[0].focus();
$('#' + id)[0].contentWindow.print();
cela fonctionne dans IE:
window.frames[id].focus();
window.frames[id].print();
Mais je ne peux rien faire fonctionner dans Safari/Chrome.
Merci
Andrew
Mettez une fonction d'impression dans l'iframe et appelez-la à partir du parent.
iframe:
function printMe() {
window.print()
}
parent:
document.frame1.printMe()
voici ma solution complète, multi-navigateur:
dans la page iframe:
function printPage() { print(); }
dans la page principale
function printIframe(id)
{
var iframe = document.frames ? document.frames[id] : document.getElementById(id);
var ifWin = iframe.contentWindow || iframe;
iframe.focus();
ifWin.printPage();
return false;
}
Update : De nombreuses personnes semblent avoir des problèmes avec cela dans les versions de IE publiées depuis que j'ai ce problème. Je n'ai pas le temps de ré-enquêter maintenant, si vous êtes coincé, je vous suggère de lire tous les commentaires dans ce fil!
J'ai utilisé le script d'Andrew mais j'ai ajouté un élément avant que la fonction printPage () soit appelée. L'iframe doit être activé, sinon, le cadre parent sera toujours imprimé dans IE.
function printIframe(id)
{
var iframe = document.frames ? document.frames[id] : document.getElementById(id);
var ifWin = iframe.contentWindow || iframe;
iframe.focus();
ifWin.printPage();
return false;
}
Ne me remercie pas, c'est Andrew qui a écrit ça. Je viens de faire un Tweak = P
En plus des solutions d'Andrew et Max, l'utilisation de iframe.focus () a abouti à l'impression du cadre parent au lieu d'imprimer uniquement un iframe enfant dans IE8. Changer cette ligne l'a corrigé:
function printIframe(id)
{
var iframe = document.frames ? document.frames[id] : document.getElementById(id);
var ifWin = iframe.contentWindow || iframe;
ifWin.focus();
ifWin.printPage();
return false;
}
Utilisez firefox window.frames
mais ajoutez également la propriété name
car elle utilise iframe dans firefox
C'EST À DIRE:
window.frames[id]
Firefox:
window.frames[name]
<img src="print.gif" onClick="javascript: window.frames['factura'].focus(); parent['factura'].print();">
<iframe src="factura.html" width="100%" height="400" id="factura" name="factura"></iframe>
J'ai dû faire quelques modifications pour pouvoir le faire avec IE8 (je n'ai pas testé avec d'autres saveurs IE)
1) document.frames [param] semble accepter un nombre, pas un identifiant
printIframe(0, 'print');
function printIframe(num, id)
{
var iframe = document.frames ? document.frames[num] : document.getElementById(id);
var ifWin = iframe.contentWindow || iframe;
ifWin.focus();
ifWin.printPage();
return false;
}
2) Une boîte de dialogue d'impression était affichée au chargement de la page et il y avait également un lien vers "Cliquez ici pour lancer l'impression" (si elle ne démarre pas automatiquement). Pour que cela fonctionne, je devais ajouter focus () call
<script type="text/javascript">
$(function(){
printPage();
});
function printPage()
{
focus();
print();
}
</script>
Une chose à noter est que si vous testez cela localement en utilisant file: ///, cela ne fonctionnera pas sur chrome car la fonction dans iframe apparaîtra comme non définie. Cependant, une fois sur un serveur Web, cela fonctionnera.
Vous pouvez utiliser
parent.frames['id'].print();
Travailler chez Chrome!
Le 'framePartsList.contentWindow.print ();' ne fonctionnait pas dans IE 11 ver11.0.43
J'ai donc utilisé FramePartsList.contentWindow.document.execCommand ('print', false, null);
Vous pouvez aussi utiliser
top.iframeName.print();
ou
parent.iframeName.print();