[javascript] 인쇄 대화 상자가 닫힌 후 자동으로 창 닫기

사용자가 버튼을 클릭하면 탭이 열립니다. 온 onload나는 그것이 인쇄 대화 상자를 불러 가지고 있지만, 사용자는 탭 자체를 닫을 수 있다면 프린터로 전송 한 후에는, 인쇄 가능성 여부를 나에게 물었다. 이것이 가능할지 확실하지 않습니다. 을 사용해 보았지만 setTimeout();사용자가주의를 산만하게하고 탭을 다시 열어야하기 때문에 정해진 기간이 아닙니다. 이를 수행하는 방법이 있습니까?



답변

print () 호출 직후 창을 닫으려고하면 즉시 창이 닫히고 print ()가 작동하지 않을 수 있습니다. 이것은 당신이하지 말아야 할 것입니다 :

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

이 솔루션은 Firefox에서 작동합니다. print () 호출시 인쇄가 완료 될 때까지 기다린 다음 javascript 처리를 계속하고 창을 닫습니다 (). IE는 print () 호출이 완료 될 때까지 기다리지 않고 close () 함수를 호출하므로 실패합니다. 인쇄가 완료되기 전에 팝업 창이 닫힙니다.

이를 해결하는 한 가지 방법은 “onafterprint”이벤트를 사용하는 것이지만 이러한 이벤트는 IE에서만 작동하므로 권장하지 않습니다.

가장 좋은 방법 은 인쇄 대화 상자가 닫히면 (인쇄가 완료되거나 취소됨) 팝업 창을 닫는 입니다. 이때 팝업 창에 초점이 맞춰지고 “onfocus”이벤트를 사용하여 팝업을 닫을 수 있습니다.

이렇게하려면 팝업 창에 다음 자바 스크립트 포함 코드를 삽입하면됩니다.

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

희망이 hepls 😉

최신 정보:

새 크롬 브라우저의 경우 너무 빨리 닫힐 수 있습니다 . 여기를 참조하십시오 . 이 변경 사항을 구현했으며 현재 모든 브라우저에서 작동합니다 : 2/29/16

        setTimeout(function () { window.print(); }, 500);
        window.onfocus = function () { setTimeout(function () { window.close(); }, 500); }


답변

이것이 내가 생각해 낸 것입니다. 왜 닫히기 전에 약간의 지연이 있는지 모르겠습니다.

 window.print();
 setTimeout(window.close, 0);


답변

다만:

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

효과가있다.


답변

나는 내가 한 일과 나를 위해 일한 것을 작성하고 싶습니다 (내가 시도한 다른 것은 효과가 없었기 때문에).

인쇄 대화 상자가 나타나기 전에 IE가 창을 닫는 문제가있었습니다.

많은 시행 착오 및 테스트 후 이것이 내가 일하게 된 것입니다.

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();

이것은 모든 브라우저에서 작동하는 것 같습니다.


답변

이 코드는 저에게 완벽하게 작동했습니다.

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

페이지가 열리면 인쇄 대화 상자가 자동으로 열리고 인쇄 또는 취소 후 창을 닫습니다.

도움이 되었기를 바랍니다.


답변

확실히 이것은 다음을 수행하여 쉽게 해결할 수 있습니다.

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

또는 예를 들어 같은 작업을하려면 이전 페이지로 이동하십시오.

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

        function back() {
            window.history.back();
        }
    </script>


답변

이미 테스트 된 브라우저 간 솔루션입니다. 2016/05까지 Chrome, Firefox, Opera에서 된 입니다.

마음에 받아 마이크로 소프트 엣지 버그가 인쇄가 취소 된 경우 창을 닫으하지 않습니다. 관련 링크

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);
    }
}