Fermer la fenêtre automatiquement après la fermeture de la boîte de dialogue d'impression

86

J'ai un onglet ouvert lorsque l'utilisateur clique sur un bouton. Sur le onloadje l'ai fait apparaître la boîte de dialogue d'impression, mais l'utilisateur m'a demandé s'il était possible qu'après l'envoi à l'imprimante pour imprimer, si l'onglet pouvait se fermer. Je ne sais pas si cela peut être fait. J'ai essayé d'utiliser setTimeout();, mais ce n'est pas une période définie car l'utilisateur pourrait être distrait et devoir rouvrir l'onglet. Y a-t-il un moyen d'accomplir cela?

Tsundoku
la source

Réponses:

113

si vous essayez de fermer la fenêtre juste après l'appel de print (), cela peut fermer la fenêtre immédiatement et print () ne fonctionnera pas. Voici ce que vous ne devez pas faire :

window.open();
...
window.print();
window.close();

Cette solution fonctionnera dans Firefox, car à l'appel de print (), elle attend que l'impression soit terminée, puis continue de traiter javascript et ferme () la fenêtre. IE échouera avec cela car il appelle la fonction close () sans attendre que l'appel print () soit terminé. La fenêtre contextuelle se fermera avant la fin de l'impression.

Une façon de le résoudre est d'utiliser l'événement "onafterprint", mais je ne vous le recommande pas car ces événements ne fonctionnent que dans IE.

Le meilleur moyen est de fermer la fenêtre contextuelle une fois la boîte de dialogue d'impression fermée (l'impression est terminée ou annulée). A ce moment, la fenêtre popup sera focalisée et vous pourrez utiliser l'événement "onfocus" pour fermer la popup.

Pour ce faire, insérez simplement ce code javascript intégré dans votre fenêtre contextuelle:

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

J'espère que ça va ;-)

Mise à jour:

Pour les nouveaux navigateurs Chrome, il se peut qu'il se ferme encore trop tôt, voir ici . J'ai implémenté ce changement et cela fonctionne pour tous les navigateurs actuels: 29/02/16

        setTimeout(function () { window.print(); }, 500);
        window.onfocus = function () { setTimeout(function () { window.close(); }, 500); }
serfer2
la source
Pour ce que ça vaut, cela semble échouer dans IE8. La fenêtre se ferme juste avant l'affichage de la boîte de dialogue d'impression.
Heath
15
cela ne semble pas fonctionner pour chrome à ce stade, étant donné que chrome gère l'impression en interne, la fenêtre ne perdra pas le focus lorsque la boîte de dialogue d'impression se charge, et par conséquent ne retrouvera pas le focus une fois l'impression terminée. Un moyen de faire en sorte que cela fonctionne pour Chrome?
jlbriggs
6
Depuis février 2016, cette réponse et AUCUNE des autres réponses basées sur focus () ne fonctionnent plus dans Chrome. La seule solution de travail est celle de @noamtcohen (malheureusement avec un nombre de votes très faible).
Jpsy
2
Je pense que la dernière version de Chrome n'affiche pas la boîte de dialogue d'impression tant que les images de la page ne sont pas chargées, mais elle exécute la fermeture avant, donc la page se ferme avant son chargement (la boîte de dialogue d'impression ne s'affiche jamais). Pour réparerwindow.onload = function () { window.print(); setTimeout(window.close, 500); };
Brian Leishman
4
La solution ci-dessus ne fonctionne plus, veuillez ajouter un écouteur d'événement onafterprint pour fermer la fenêtre window.onafterprint = function () {window.close ()};
Rahat Hameed
91

C'est ce que j'ai proposé, je ne sais pas pourquoi il y a un petit retard avant la fermeture.

 window.print();
 setTimeout(window.close, 0);
noamtcohen
la source
1
Il est intéressant de noter que cette réponse mal notée est actuellement la bonne. Depuis février 2016, aucune des réponses basées sur focus () ne fonctionne plus dans Chrome. Cette solution fonctionne dans FF, Chrome et Safari sur Windows et OS X, IE9 +, Android Chrome et IOS Safari. Nous n'avons rencontré que des boîtes de dialogue de confirmation dans les anciens IE. Tous les autres se ferment de manière transparente.
Jpsy
6
Au 17 mars, cela ne fonctionnait pas pour moi exactement comme dans Chrome (56), mais l'ajout d'un peu de temps au temps d'arrêt fonctionnait. window.print (); setTimeout (window.close, 500);
jAC
Comme jAC l'a mentionné, il a fallu plus de temps pour que cela fonctionne. Sur le mien, 10 ms ne suffisaient pas, mais 100 l'étaient. Cela semble être une question de temps qu'il faut pour rendre l'aperçu avant impression. Avec le mien réglé à 10 ms, il n'a imprimé qu'une version partiellement rendue de la page. Avec 100, j'ai tout.
Jacob Ewing
1
Pour développer cela, il ~ semble ~ que le délai d'attente soit suspendu une fois que la fenêtre d'impression est entièrement rendue (en chrome sur un macbook de toute façon), et le reste compté après la fermeture de la fenêtre.
Jacob Ewing
1
Vous n'avez pas besoin du 0, c'est la valeur par défaut
Brian Leishman
14

Juste:

window.print();
window.close();

Ça marche.

Style Ying
la source
2
Cela ne fonctionne pas de manière fiable pour moi sur Chrome. Parfois cela fonctionne, mais parfois la fenêtre se ferme juste immédiatement avant que la boîte de dialogue d'impression ne s'affiche. Je peux éviter que cela ne se produise en augmentant le délai d'expiration à 5000, mais cela prend parfois jusqu'à 5 secondes pour que la fenêtre se ferme après l'impression. Je ne sais pas exactement ce qui se passe ici, mais cela ne semble pas susceptible d'être robuste sur différents navigateurs.
speedarius
1
Comme mentionné ci-dessous, la solution complète pour tous les navigateurs est plus complexe.
Eric
1
N'oubliez pas l' Scripts may close only the windows that were opened by it.avertissement.
Cas Bloem
La solution ci-dessus ne fonctionne plus, veuillez ajouter un écouteur d'événements sur la post-impression pour fermer la fenêtre. window.onafterprint = function(){ window.close()};
Rahat Hameed
12

Je veux juste écrire ce que j'ai fait et ce qui a fonctionné pour moi (car rien d'autre que j'ai essayé n'avait fonctionné).

J'ai eu le problème qu'IE fermait les fenêtres avant que la boîte de dialogue d'impression ne se lève.

Après de nombreux essais et erreurs, voici ce que je me suis mis au travail:

var w = window.open();
w.document.write($('#data').html()); //only part of the page to print, using jquery
w.document.close(); //this seems to be the thing doing the trick
w.focus();
w.print();
w.close();

Cela semble fonctionner dans tous les navigateurs.

Holger
la source
semblait fonctionner. ce n'est plus le cas, je posterai mon code ci-dessous.
Remco
10

Ce code a parfaitement fonctionné pour moi:

<body onload="window.print()" onfocus="window.close()">

Lorsque la page s'ouvre, elle ouvre automatiquement la boîte de dialogue d'impression et après l'impression ou l'annulation, elle ferme la fenêtre.

J'espère que cela aide,

Victor Olaru
la source
cette dose ne fonctionne pas si vous avez ouvert le pdf pour imprimer pas html ou jsp où alors je peux mettre le corps onload?
shareef
9

Bien sûr, cela est facilement résolu en faisant ceci:

      <script type="text/javascript">
         window.print();
         window.onafterprint = window.close();
      </script>

Ou si vous voulez faire quelque chose comme par exemple, allez à la page précédente.

    <script type="text/javascript">
        window.print();
        window.onafterprint = back;

        function back() {
            window.history.back();
        }
    </script>
Samuel Bié
la source
window.close ();
Mustafa
Remarque: window.onafterprint = window.close();devrait être window.onafterprint = window.close;Le premier attribue le résultat de window.close()à onafterprint. Cela entraînera window.close()une exécution immédiate lorsque le gestionnaire est défini et rien à exécuter lorsque l' onafterprintévénement est déclenché. Ce dernier assigne window.closele gestionnaire d'événements, ce que nous voulons.
Kei
En outre, dans certains navigateurs, l'exécution du code s'interrompt window.print();jusqu'à ce que la boîte de dialogue d'impression soit fermée. Lorsque cela se produit, il est possible que l' onafterprintévénement soit déclenché avant onafterprintson affectation. Ainsi, il vaudrait mieux window.onafterprint = window.close;venir avant window.print();. Sinon, l'approche utilisée dans cette réponse fonctionne mieux que celles basées sur onfocus ou setTimeout suggérées par les autres réponses.
Kei
8

Il s'agit d'une solution multi-navigateurs déjà testée sur Chrome, Firefox, Opera d'ici 2016/05.

Gardez à l'esprit que Microsoft Edge a un bogue qui ne fermera pas la fenêtre si l'impression était annulée. Lien connexe

var url = 'http://...';
var printWindow = window.open(url, '_blank');
printWindow.onload = function() {
    var isIE = /(MSIE|Trident\/|Edge\/)/i.test(navigator.userAgent);
    if (isIE) {

        printWindow.print();
        setTimeout(function () { printWindow.close(); }, 100);

    } else {

        setTimeout(function () {
            printWindow.print();
            var ival = setInterval(function() {
                printWindow.close();
                clearInterval(ival);
            }, 200);
        }, 500);
    }
}
Heroselohim
la source
7

En utilisant Chrome, j'ai essayé pendant un certain temps de faire fonctionner le window.onfocus=function() { window.close(); }et le <body ... onfocus="window.close()"> . Mes résultats:

  1. J'avais fermé ma boîte de dialogue d'impression, rien ne s'est passé.
  2. J'ai changé de fenêtre / onglets dans mon navigateur, toujours rien.
  3. changé de nouveau à ma première fenêtre / onglet, puis l'événement window.onfocus a déclenché la fermeture de la fenêtre.

J'ai également essayé <body onload="window.print(); window.close()" >ce qui a entraîné la fermeture de la fenêtre avant même de pouvoir cliquer sur quoi que ce soit dans la boîte de dialogue d'impression.

Je ne pouvais utiliser ni l'un ni l'autre. J'ai donc utilisé un petit Jquery pour surveiller l'état du document et ce code fonctionne pour moi.

<script type="text/javascript">
    var document_focus = false; // var we use to monitor document focused status.
    // Now our event handlers.
    $(document).focus(function() { document_focus = true; });
    $(document).ready(function() { window.print(); });
    setInterval(function() { if (document_focus === true) { window.close(); }  }, 500);
</script>

Assurez-vous simplement d'avoir inclus jquery, puis copiez / collez-le dans le code HTML que vous imprimez. Si l'utilisateur a imprimé, enregistré au format PDF ou annulé le travail d'impression, la fenêtre / l'onglet s'autodétruira. Remarque: je n'ai testé cela que dans Chrome.

Éditer

Comme Jypsy l'a souligné dans les commentaires, le statut de focus du document n'est pas nécessaire. Vous pouvez simplement utiliser la réponse de noamtcohen, j'ai changé mon code pour cela et cela fonctionne.

Nado11
la source
Cette solution provoque le blocage de la fenêtre d'origine si l'utilisateur ferme la fenêtre contextuelle avec le «X» dans le coin plutôt que de sélectionner Annuler ou Imprimer. Même problème que la solution de Juan, que @JFK avait signalé à l'origine.
Clayton
Le javascript ci-dessus ne doit pas être placé dans le code HTML en cours d'impression, qu'il soit ouvert dans une fenêtre contextuelle ou, comme je le fais, dans un nouvel onglet. Ainsi, ce javascript n'a aucun effet sur la fenêtre d'origine.
Nado11
5

celui-ci fonctionne pour moi:

<script>window.onload= function () { window.print();window.close();   }  </script>
arun.m
la source
5

Ce qui suit a fonctionné pour moi:

function print_link(link) {
    var mywindow = window.open(link, 'title', 'height=500,width=500');   
    mywindow.onload = function() { mywindow.print(); mywindow.close(); }
}
Md Abu Sohib Hossain
la source
5

Enveloppez simplement window.close par le gestionnaire d'événements onafterprint, cela a fonctionné pour moi

printWindow.print();
printWindow.onafterprint = () => printWindow.close();
user10145303
la source
Nécessite Safari v12
Paul Brady le
4

Cela fonctionne bien dans Chrome 59:

window.print();
window.onmousemove = function() {
  window.close();
}
maxhud
la source
4

J'ai essayé beaucoup de choses qui n'ont pas fonctionné. La seule chose qui a fonctionné pour moi était:

window.print();
window.onafterprint = function () {
    window.close();
}

testé sur chrome.

Zeyad
la source
Je déteste à quel point cela fonctionne
Franz Justin Buenaventura
3

La solution suivante fonctionne pour les versions plus récentes d'IE9, IE8, Chrome et FF à partir du 10/03/2014. Le scénario est le suivant: vous êtes dans une fenêtre (A), où vous cliquez sur un bouton / lien pour lancer le processus d'impression, puis une nouvelle fenêtre (B) avec le contenu à imprimer est ouverte, la boîte de dialogue d'impression s'affiche immédiatement, et vous pouvez annuler ou imprimer, puis la nouvelle fenêtre (B) se ferme automatiquement.

Le code suivant permet cela. Ce code javascript est à placer dans le html pour la fenêtre A (pas pour la fenêtre B):

/**
 * Opens a new window for the given URL, to print its contents. Then closes the window.
 */
function openPrintWindow(url, name, specs) {
  var printWindow = window.open(url, name, specs);
    var printAndClose = function() {
        if (printWindow.document.readyState == 'complete') {
            clearInterval(sched);
            printWindow.print();
            printWindow.close();
        }
    }
    var sched = setInterval(printAndClose, 200);
};

Le bouton / lien pour lancer le processus doit simplement invoquer cette fonction, comme dans:

openPrintWindow('http://www.google.com', 'windowTitle', 'width=820,height=600');
Juan Manuel Perez
la source
Cela fonctionne dans Chrome tant que l'utilisateur imprime ou annule l'opération MAIS si l'utilisateur ferme la fenêtre (B), la fenêtre (A) se bloque (ai-je dit dans Chrome?). Testez (dans Chrome) jsfiddle.net/qy6QV/2/show et fermez la fenêtre. Ensuite, essayez de le recharger ... accroché.
JFK
2
<!doctype html>
<html>
<script>
 window.print();
 </script>
<?php   
date_default_timezone_set('Asia/Kolkata');
include 'db.php'; 
$tot=0; 
$id=$_GET['id'];
    $sqlinv="SELECT * FROM `sellform` WHERE `id`='$id' ";
    $resinv=mysqli_query($conn,$sqlinv);
    $rowinv=mysqli_fetch_array($resinv);
?>
        <table width="100%">
           <tr>
                <td style='text-align:center;font-sie:1px'>Veg/NonVeg</td>  
            </tr>
            <tr>
                <th style='text-align:center;font-sie:4px'><b>HARYALI<b></th>  
            </tr>   
            <tr>
                <td style='text-align:center;font-sie:1px'>Ac/NonAC</td>  
            </tr>
            <tr>
                <td style='text-align:center;font-sie:1px'>B S Yedurappa Marg,Near Junne Belgaon Naka,P B Road,Belgaum - 590003</td>  
            </tr>
        </table>
        <br>    
        <table width="100%">
           <tr>
                <td style='text-align:center;font-sie:1'>-----------------------------------------------</td>  
            </tr>
        </table>

        <table  width="100%" cellspacing='6' cellpadding='0'>

            <tr>
                <th style='text-align:center;font-sie:1px'>ITEM</th>
                <th style='text-align:center;font-sie:1px'>QTY</th>
                <th style='text-align:center;font-sie:1px'>RATE</th>
                <th style='text-align:center;font-sie:1px'>PRICE</th>
                <th style='text-align:center;font-sie:1px' >TOTAL</th>
            </tr>

            <?php
            $sqlitems="SELECT * FROM `sellitems` WHERE `invoice`='$rowinv[0]'";
            $resitems=mysqli_query($conn,$sqlitems);
            while($rowitems=mysqli_fetch_array($resitems)){
            $sqlitems1="SELECT iname FROM `itemmaster` where icode='$rowitems[2]'";
            $resitems1=mysqli_query($conn,$sqlitems1);
            $rowitems1=mysqli_fetch_array($resitems1);
            echo "<tr>
                <td style='text-align:center;font-sie:3px'  >$rowitems1[0]</td>
                <td style='text-align:center;font-sie:3px' >$rowitems[5]</td>
                <td style='text-align:center;font-sie:3px' >".number_format($rowitems[4],2)."</td>
                <td style='text-align:center;font-sie:3px' >".number_format($rowitems[6],2)."</td>
                <td style='text-align:center;font-sie:3px' >".number_format($rowitems[7],2)."</td>
              </tr>";
                $tot=$tot+$rowitems[7];
            }

            echo "<tr>
                <th style='text-align:right;font-sie:1px' colspan='4'>GRAND TOTAL</th>
                <th style='text-align:center;font-sie:1px' >".number_format($tot,2)."</th>
                </tr>";
            ?>
        </table>
     <table width="100%">
           <tr>
                <td style='text-align:center;font-sie:1px'>-----------------------------------------------</td>  
            </tr>
        </table>
        <br>
        <table width="100%">
            <tr>
                <th style='text-align:center;font-sie:1px'>Thank you Visit Again</th>  
            </tr>
        </table>
<script>
window.close();
</script>
</html>

Imprimer et fermer la nouvelle fenêtre d'onglet avec php et javascript en un seul clic

Abhinandan Budavi
la source
1

Cela a fonctionné mieux pour moi en injectant le HTML dans la fenêtre contextuelle, comme ce qui <body onload="window.print()"... précède fonctionne pour IE, Chrome et FF (sur Mac) mais pas de FF sur Windows.

https://stackoverflow.com/a/11782214/1322092

var html = '<html><head><title></title>'+
               '<link rel="stylesheet" href="css/mycss.css" type="text/css" />'+
               '</head><body onload="window.focus(); window.print(); window.close()">'+
               data+
               '</body></html>';
user1322092
la source
1

Voici ce que je fais ...

Permettre à la fenêtre de s'imprimer et de se fermer en fonction d'un paramètre de requête.

Nécessite jQuery. Peut être fait dans _Layout ou master page pour travailler avec toutes les pages.

L'idée est de passer un paramètre dans l'URL indiquant à la page d'imprimer et de fermer, si le paramètre est défini, l'événement jQuery «ready» imprime la fenêtre, puis lorsque la page est complètement chargée (après impression), le «onload» est appelé ce qui ferme la fenêtre. Toutes ces étapes apparemment supplémentaires consistent à attendre que la fenêtre s'imprime avant de se fermer.

Dans le corps html, l'événement d'ajout et de chargement qui appelle printAndCloseOnLoad (). Dans cet exemple, nous utilisons cshtm, vous pouvez également utiliser javascript pour obtenir param.

<body onload="sccPrintAndCloseOnLoad('@Request.QueryString["PrintAndClose"]');">

Dans le javascript, ajoutez la fonction.

function printAndCloseOnLoad(printAndClose) {
    if (printAndClose) {
        // close self without prompting
        window.open('', '_self', ''); window.close();
    }
}

Et un événement prêt pour jQuery.

$(document).ready(function () {
    if (window.location.search.indexOf("PrintAndClose=") > 0)
        print();
});

Maintenant, lors de l'ouverture d'une URL, ajoutez simplement la chaîne de requête param "PrintAndClose = true" et elle s'imprimera et se fermera.

RitchieD
la source
1

Pour moi, ma solution finale était un mélange de plusieurs réponses:

    var newWindow = window.open();
    newWindow.document.open();
    newWindow.document.write('<html><link rel="stylesheet" href="css/normalize-3.0.2.css" type="text/css" />'
            + '<link rel="stylesheet" href="css/default.css" type="text/css" />'
            + '<link rel="stylesheet" media="print" href="css/print.css" type="text/css" />');

    newWindow.document.write('<body onload="window.print();" onfocus="window.setTimeout(function() { window.close(); }, 100);">');
    newWindow.document.write(document.getElementById(<ID>).innerHTML);
    newWindow.document.write('</body></html>');
    newWindow.document.close();
    newWindow.focus();
Felipe
la source
1

C'est ce qui a fonctionné pour moi (2018/02). J'avais besoin d'une demande distincte car mon impression ne s'affiche pas encore à l'écran. Sur la base de certaines des excellentes réponses ci-dessus, pour lesquelles je vous remercie tous, j'ai remarqué:

  • w.onloadne doit pas être réglé avant w.document.write(data).
    Cela semble étrange car vous voudriez régler le crochet au préalable. Ma conjecture: le crochet est déjà déclenché lors de l'ouverture de la fenêtre sans contenu. Puisqu'il est tiré, il ne se déclenchera plus. Mais, quand le traitement est encore en cours avec un nouveaudocument.write() le hook sera appelé une fois le traitement terminé.
  • w.document.close()est toujours nécessaire. Sinon, rien ne se passe.

J'ai testé cela dans Chrome 64.0, IE11 (11.248), Edge 41.16299 (edgeHTML 16.16299), FF 58.0.1. Ils se plaindront des popups, mais cela s'imprime.

function on_request_print() {
  $.get('/some/page.html')
    .done(function(data) {
      console.log('data ready ' + data.length);
      var w = window.open();
      w.document.write(data);
      w.onload = function() {
        console.log('on.load fired')
        w.focus();
        w.print();
        w.close();
      }
      console.log('written data')
      //this seems to be the thing doing the trick
      w.document.close();
      console.log('document closed')
    })
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<a onclick="on_request_print();">Print rapportage</a>
Remco
la source
1
const printHtml = async (html) => {
    const printable = window.open('', '_blank', 'fullscreen=no');
    printable.document.open();
    printable.document.write(`<html><body onload="window.print()">${html}</body></html>`);
    await printable.print();
    printable.close();
};

Voici ma solution ES2016.

Stuart
la source
1
Bonjour Stuart et bienvenue dans Stack Overflow! Pourriez-vous expliquer pourquoi ce code fonctionne pour aider davantage l'OP et les autres utilisateurs? Merci!
heather
1

Cela fonctionne parfaitement pour moi @holger, cependant, je l'ai modifié et me convient mieux, la fenêtre apparaît maintenant et se ferme immédiatement lorsque vous appuyez sur le bouton d'impression ou d'annulation.

function printcontent()
{ 
var disp_setting="toolbar=yes,location=no,directories=yes,menubar=yes,"; 
disp_setting+="scrollbars=yes,width=300, height=350, left=50, top=25"; 
var content_vlue = document.getElementById("content").innerHTML; 
var w = window.open("","", disp_setting);
w.document.write(content_vlue); //only part of the page to print, using jquery
w.document.close(); //this seems to be the thing doing the trick
w.focus();
w.print();
w.close();
}"
Abubakar Ahmed Ruma
la source
1

jquery:

$(document).ready(function(){ 
  window.print();
  setTimeout(function(){ 
             window.close();
  }, 3000);
});
Armandof
la source
0

IE avait (a?) Le onbeforeprintetonafterprint événements : vous pourriez attendre cela, mais cela ne fonctionnerait que sur IE (ce qui peut ou non être ok).

Vous pouvez également essayer d'attendre que le focus revienne à la fenêtre à partir de la boîte de dialogue d'impression et de le fermer. Amazon Web Services fait cela dans leurs boîtes de dialogue d'impression de factures: vous appuyez sur le bouton d'impression, cela ouvre la vue conviviale et ouvre immédiatement la boîte de dialogue de l'imprimante. Si vous appuyez sur Imprimer ou si vous annulez, la boîte de dialogue d'impression se ferme, puis la vue conviviale se ferme immédiatement.

Femi
la source
0

Il y a beaucoup de mal à faire fonctionner des choses comme celle-ci sur les navigateurs.

À l'origine, je cherchais à faire le même genre de chose: ouvrir une nouvelle page conçue pour l'impression, l'imprimer avec JS, puis la refermer. C'était un cauchemar.

En fin de compte, j'ai choisi de cliquer simplement sur la page imprimable, puis d'utiliser le JS ci-dessous pour lancer une impression, puis de me rediriger vers où je voulais aller une fois terminé (avec une variable définie en PHP dans cet exemple).

J'ai testé cela sur Chrome et Firefox sur OSX et Windows, et IE11-8, et cela fonctionne sur tous (bien qu'IE8 se fige un peu si vous n'avez pas d'imprimante installée).

Bonne chasse (impression).

<script type="text/javascript">

   window.print(); //this triggers the print

   setTimeout("closePrintView()", 3000); //delay required for IE to realise what's going on

   window.onafterprint = closePrintView(); //this is the thing that makes it work i

   function closePrintView() { //this function simply runs something you want it to do

      document.location.href = "'.$referralurl.'"; //in this instance, I'm doing a re-direct

   }

</script>
boboshady
la source
0

utilisez simplement ce script java

 function PrintDiv() {
    var divContents = document.getElementById("ReportDiv").innerHTML;
    var printWindow = window.open('', '', 'height=200,width=400');
    printWindow.document.write('</head><body >');
    printWindow.document.write(divContents);
    printWindow.document.write('</body></html>');
    printWindow.document.close();
    printWindow.print();
    printWindow.close();
}

il fermera la fenêtre après avoir cliqué sur le bouton Soumettre ou Annuler

user3373573
la source
0

Sur IE11, l'événement onfocus est appelé deux fois, ainsi l'utilisateur est invité deux fois à fermer la fenêtre. Cela peut être évité par un léger changement:

<script type="text/javascript">
  var isClosed = false;
  window.print();
  window.onfocus = function() {
    if(isClosed) { // Work around IE11 calling window.close twice
      return;
    }
    window.close();
    isClosed = true;
  }
</script>
Jakob Kofoed Janot
la source
0

Cela a fonctionné pour moi dans FF 36, Chrome 41 et IE 11. Même si vous annulez l'impression, et même si vous avez fermé la boîte de dialogue d'impression avec le "X" en haut à droite.

var newWindow=window.open(); 
newWindow.document.open();
newWindow.document.write('<HTML><BODY>Hi!</BODY></HTML>'); //add your content
newWindow.document.close();
newWindow.print();      

newWindow.onload = function(e){ newWindow.close(); }; //works in IE & FF but not chrome 

//adding script to new document below makes it work in chrome 
//but alone it sometimes failed in FF
//using both methods together works in all 3 browsers
var script   = newWindow.document.createElement("script");
script.type  = "text/javascript";
script.text  = "window.close();";
newWindow.document.body.appendChild(script);
James Bell
la source
0
setTimeout(function () { window.print(); }, 500);
        window.onfocus = function () { setTimeout(function () { window.close(); }, 500); }

Cela fonctionne parfaitement pour moi. J'espère que cela aide

Klajdi Dosti
la source
0

Cela fonctionne pour moi sur Chrome (je n'ai pas essayé d'autres)

$(function(){
    window.print();
    $("body").hover(function(){
        window.close();
    });
});
emmmm
la source
0

J'ai essayé ça et ça marche

var popupWin = window.open('', 'PrintWindow', 
'width=650,height=650,location=no,left=200px');
popupWin.document.write(data[0].xmldata);
popupWin.print();
popupWin.close();
user13548
la source