Fonction d'impression dans google Chrome ne fonctionne plus
Notre site web dispose d'une fonction par laquelle un profil de membre peut être imprimé. La façon dont il fonctionne, c'est qu'une fonction javascript est attaché à un bouton via un onsubmit. La fonction javascript utilise une fenêtre.ouvert à rouvrir la page dans un mode spécial, qui affiche à nouveau une version imprimable de la page.
Cette fonctionnalité a été mise en place depuis 2008, et fonctionne dans tous les navigateurs. À l'exception d'environ une semaine ou deux il ya, il a cessé de travailler en Chrome. Avec Chrome, ce qui se passe, c'est que l'ouverture de la fenêtre n'est ouverte, mais alors une autre fenêtre vide s'ouvre brièvement, puis le toutes proches.
Dans la recherche de la discussion de cette question, j'ai été incapable de trouver la cause exacte, mais n'a trouver quelque chose qui dit qu'un "return false" doit être ajouté à la onsubmit. J'ai essayé d'ajouter que, mais il n'a pas aidé.
Voici ce que le onsubmit ressemble:
<button onclick="PrintEmailSubmit('print');">Print Profile</button>
Voici ce que le code qui ouvre la fenêtre ressemble à ceci:
window.open('print-email-profile.php?mode=' + mode,'','width=' + width + ',height=' + height + ',scrollbars=yes,location=0,menubar=1,status=0,toolbar=0')
Alors qu'il ne devrait pas être nécessaire de voir, ici, c'est l'ensemble de la fonction PrintEmailSubmit():
/*
* called by view-profile.php
*/
function PrintEmailSubmit(mode)
{
var width;
var height;
switch(mode)
{
case 'print':
width = 850;
height = 1000;
break;
case 'email':
width = 400;
height = 120;
break;
default:
alert('Error: invalid calling sequence -- should not happen!');
exit;
}
window.open('print-email-profile.php?mode=' + mode,'','width=' + width + ',height=' + height + ',scrollbars=yes,location=0,menubar=1,status=0,toolbar=0');
}
Et enfin, ce qui rend ce travail est que la version spéciale de la page a la suite ajouté à la balise body:
<body onload="window.print();window.close();">
Comme indiqué ci-dessus, la fonction continue à travailler dans IE et Firefox. Juste Chrome est d'avoir ce problème.
Des idées?
Si c'est pas trop long, veuillez inclure le JS pour PrintEmailSubmit
Cela fonctionne sans fenêtre.fermer? Si, ensuite, vous définissez le délai pour la fermeture de la fenêtre ou de l'utilisation du bouton à la place.
Badr Hari: ce qui est bizarre, c'est qu'il a bien fonctionné pendant 6 ans dans tous les navigateurs, mais maintenant ne fonctionne tout simplement pas pour Chrome. En prenant de la fenêtre.près de la body onload ne permettent en réalité de la fonction d'impression de travailler pour google Chrome, mais il laisse l'impression respectueux de la fenêtre ouverte. Donc, ce pointe dans la direction d'une solution. Je voudrais juste avoir pour obtenir la fenêtre.proche d'être là, mais pas déclenché prématurément
Diodeus: je n'ai pas présent, car il ne serait pas trop utile. Mais puisque vous le demandez, je vais l'ajouter à la question d'origine.
OriginalL'auteur Jeffrey Simon | 2013-08-14
Vous devez vous connecter pour publier un commentaire.
Le bouton et la fenêtre.ouvrez n'ont vraiment rien à voir avec votre problème.
Le problème est, Chrome est à la recherche pour la saisie de l'utilisateur avant de l'imprimer. De la fenêtre.print() ouvre la fenêtre de dialogue d'impression, mais Chrome n'est pas en attente pour vous à la fin de l'impression. De la fenêtre.close() est la fermeture de la fenêtre de dialogue d'impression et tout le reste dans le parent.
Dans un effort pour gagner du temps, sachez que la OnAfterPrint crochet n'est pas utilisé par Chrome. J'ai aussi essayé de mettre de la fenêtre.close() dans le onLoad et de la fenêtre.print() dans le onBeforeUnload, mais la boîte de dialogue imprimer annule la fenêtre.close(). La prochaine meilleure chose serait de faire quelque chose comme:
Je n'ai pas testé, mais je pense qu'il illustre l'idée assez efficacement.
Ensuite, pourquoi ne pas les mettre dans une fenêtre.fermer sans le setTimeout? Toutefois, cela ne fonctionne pas. Le setTimeout doit être là, mais peut être très court. J'ai 200 maintenant, ou .2 d'une seconde, et il fonctionne très bien. En effet, elle permet à la fonction de travail pour google Chrome, comme il l'a fait dans le passé, la boîte de dialogue imprimer attend simplement indefintitely pour la saisie de l'utilisateur, et il n'y a pas de délai pour fermer la fenêtre. Je ne comprends pas, mais il fonctionne. En fait, le même code fonctionne sur les autres navigateurs, permettant une très simplifiée de la forme finale. Ajouter le setTimeout pour le code original semble suffisant pour résoudre le problème.
Solution finale: utilisez la commande suivante à la place de l'original body onload: <body onload="window.print(); setTimeout(function(){window.close();}, 200)">
J'ai eu un problème similaire fenêtre appelante.print (), puis à définir l'emplacement.href vers une nouvelle page. La fenêtre d'impression n'est jamais apparu (semblait-il). Cette réponse a résolu mon problème. Merci beaucoup, Bûcheron!
Pour être tout à fait correcte, vous devez les mettre à la fois print() et close() dans une fonction settimeout comme suit: setTimeout(function(){window.print(); window.close();}, 200); de Cette manière, a travaillé pour moi.
OriginalL'auteur Lumberjack
J'ai trouvé cette solution et cela fonctionne vraiment:
OriginalL'auteur Mari
J'utilise M. bresleveloper solution avec quelques modifications:
OriginalL'auteur Alaa.Kh
Le Chrome est tellement rapide qu'il fait appel à l'impression avant que le document est chargé. C'est pourquoi la meilleure chose à faire est de simplement déplacer la fonction d'impression à onload, soit comme Mari ou comme ceci:
Et de l'o.c. il ne fonctionne pas sous IE, si plein de code devrait ressembler à ceci
OriginalL'auteur bresleveloper