J'ai un problème avec impression sur Safari. Mon système est Windows 7 et cette fonction fonctionne bien dans tous les autres navigateurs sauf safari. Voici la situation:
var test = document.getElementById('test'); test.style.background = 'yellow';
5 Réponses :
Ceci est un comportement impair. J'ai testé dans Safari 6.1 sur Mac.
Mais puis-je demander pourquoi vous devez vous connecter quelque chose avant l'impression? Parce qu'il semble que toutes les fonctions soient exécutées avant que le panneau d'impression apparaisse: p> Lorsque vous examinez l'aperçu de l'impression, la page aura le texte "avant d'imprimer" dessus. Pour une raison quelconque, la console enregistre uniquement le texte uniquement lorsque le panneau d'impression se ferme, mais à mon avis qui n'a pas d'importance pour vos visiteurs. Vous pouvez manipuler DOM et changer la page avant votre processus d'impression. P> p>
Oui @stéphaan, il n'est pas nécessaire d'ajouter console.log code>, mais j'ai vraiment besoin d'ajouter un code de manipulation DOM avant
fenêtre.print () code>, et sur mon safari, le < Code> Fenêtre.Print (); CODE> TOUJOURS EXECUTEZ TOUJOURS EXÉCUT AVANT D'EXÉCUTER AVANT LE CODE JS AVANT D'IN AVANT, la même chose se produit même si je remplace
fenêtre.print () code> au lieu de
Settimeout (fenêtre. Imprimer (), 5000) code>.
C'est tout mon point entier, le DOM est manipulé avant la fenêtre .Print () code>. Essayez mon exemple dans Safari lorsque vous regardez l'aperçu de l'impression, vous verrez qu'il y a du texte sur la page.
Non, dans mon vrai code, je manipule Dom avant fenêtre.print () code>, et cela ne fonctionne pas, c'est pourquoi je pose cette question. Vous pouvez voir mes mises à jour sur la question, j'ai essayé de modifier la couleur de texte d'un élément avant
fenêtre.print (); code>, mais la couleur n'a pas changé avant de cliquer sur le bouton Annuler sur le panneau d'impression.
Je viens de faire un autre test où j'ai changé la couleur du texte et la couleur de fond et cela a fonctionné bien. Il ne montre pas sur la page avant d'annuler la boîte de dialogue Imprimer, mais lorsque j'ai imprimé la page, il a eu la couleur modifiée, même sans settimeout, donc je ne sais pas pourquoi cela ne fonctionnera pas avec votre code
Eh bien, peut-être que c'est juste un problème sur Safari Windows.
Après plusieurs fois, essayez, ci-dessous fonctionne, mais je ne connais pas la raison, quelqu'un peut-il expliquer? Ou ceci est un bug safari?
window.onload = function() { $('body').html('After change'); setTimeout(window.print, 1000); };
Le problème est que les navigateurs arrêtent l'exécution JavaScript lorsque l'impression est initialisée. Safari peut initialiser l'impression avant que la console.log s'exécute, ce qui signifie qu'il retarde le journal.
Pour moi, la solution J'ai pris cette ligne qui a fonctionné pour moi Safari Et cela a fonctionné ok pour moi pour l'instant dans Safari et Chrome P> Settimeout code> n'a pas fonctionné. J'ai trouvé ce plugin https://github.com/jasonday/printthis qui a beaucoup de solution de contournement pour
fenêtre.Print () code> car il semble ne pas être entièrement pris en charge par tous les navigateurs.
document.execcommand ("print", faux, null ) code> p>
try {
document.execCommand('print', false, null);
}
catch(e) {
window.print();
}
Safari imprime la page avant qu'il ne soit chargé, contrairement aux autres navigateurs. Par conséquent, Window.Onload () peut être utilisé dans le code de la page HTML nouvellement ouverte. Mais si la page ouverte est une teneur non HTML, elle n'est pas possible. La solution ci-dessous est globale entre navigateurs et type de contenu ouvert.
Ajout d'une solution de plus qui a fonctionné pour mon cas:
Faites d'abord votre fenêtre contextuelle. P>
$(window).bind("load", function() { setTimeout( function () { try { document.execCommand('print', false, null); } catch(e) { window.print(); } }, 500); });
Juste une note (je sais que c'est un commentaire tardif, mais il est applicable à '14). Safari a été interrompu pour Windows de retour dans '12 (lorsque Safari 6 est sorti). Donc, si vous essayez de tester Safari sur Windows, sachez que ce n'est pas représentatif de Safari sur Mac et sachez que de nombreuses fonctionnalités «nouvelles» (comme certaines choses HTML5), tout simplement ne fonctionnera pas, ou ne sera pas travailler comme prévu.