Подтвердить что ты не робот

Как определить окно window.print()

В моем приложении я попытался распечатать страницу ваучера для пользователя, я использовал:

  var htm ="<div>Voucher Details</div>";
  $('#divprint').html(htm);
  window.setTimeout('window.print()',2000);

'divprint' - это div на моей странице, где хранится информация о ваучере.

Он работает, и появляется страница печати. Но я хочу продолжить приложение после того, как пользователь нажмите "print" или "close" всплывающее окно.

например, я хотел бы перенаправить пользователя на другую страницу после закрытия всплывающего окна:

window.application.directtoantherpage();//a function which direct user to other page

Как определить всплывающее окно печати закрыто или печать завершена?

4b9b3361

Ответ 1

В FireFox и Internet Explorer вы можете прослушивать событие после печати. ​​

https://developer.mozilla.org/en-US/docs/Web/API/window.onafterprint

window.onafterprint = function(){
   console.log("Printing completed...");
}

Возможно, можно использовать window.matchMedia, чтобы получить эту функциональность в других браузерах.

(function() {

    var beforePrint = function() {
        console.log('Functionality to run before printing.');
    };

    var afterPrint = function() {
        console.log('Functionality to run after printing');
    };

    if (window.matchMedia) {
        var mediaQueryList = window.matchMedia('print');
        mediaQueryList.addListener(function(mql) {
            if (mql.matches) {
                beforePrint();
            } else {
                afterPrint();
            }
        });
    }

    window.onbeforeprint = beforePrint;
    window.onafterprint = afterPrint;

}());

Источник: http://tjvantoll.com/2012/06/15/detecting-print-requests-with-javascript/

Ответ 2

На хром (V.35.0.1916.153 м) Попробуйте следующее:

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

Отлично работает для меня. Он закроет окно после того, как пользователь закончит работу над диалогом печати.

Ответ 3

совместим с хром, firefox, opera, Internet Explorer
Примечание: требуется jQuery.

<script>

    window.onafterprint = function(e){
        $(window).off('mousemove', window.onafterprint);
        console.log('Print Dialog Closed..');
    };

    window.print();

    setTimeout(function(){
        $(window).one('mousemove', window.onafterprint);
    }, 1);

</script>

Ответ 4

См. fooobar.com/questions/95628/.... В качестве обходного пути вы можете прослушивать событие afterPrint в окне (Firefox и IE) и прослушивать движение мыши по документу (указывая, что пользователь закрыл диалоговое окно печати и вернулся на страницу) после window.mediaMatch API указывает, что носитель больше не соответствует "print" (Firefox и Chrome).

Имейте в виду, что пользователь мог или не мог напечатать документ. Кроме того, если вы слишком часто вызываете window.print() в Chrome, пользователь может даже не запрашивать печать.

Ответ 5

Вы можете обнаружить, когда window.print() закончен, просто поместив его в другую функцию

//function to call if you want to print
var onPrintFinished=function(printed){console.log("do something...");}

//print command
onPrintFinished(window.print());

протестирован в Firefox, Google Chrome, IE

Ответ 6

Печать в новом окне с w = window.open(url, '_blank') и попробуйте w.focus(); w.close(); и обнаруживать, когда страница закрыта. Работает во всех браузерах.

w = window.open(url, '_blank');
w.onunload = function(){
 console.log('closed!');
}
w.focus();
w.print();
w.close();

Закрытие окна после завершения печати. ​​

Ответ 7

Это действительно работало для меня в хроме. Я был очень удивлен.

jQuery(document).bind("keyup keydown", function(e){
    if(e.ctrlKey && e.keyCode == 80){
         Print(); e.preventDefault();
    }
});

Где Print - это функция, которую я написал, что вызывает window.print(); Он также работает как чистый блокиратор, если вы отключите Print();

Как отмечено здесь пользователем3017502

window.print() будет приостановлен, поэтому вы можете добавить onPrintFinish или onPrintBegin, как это.

function Print(){
    onPrintBegin
    window.print();
    onPrintFinish(); 
}

Ответ 8

Протестировано IE, FF, Chrome и работает во всех.

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

Ответ 9

Учитывая, что вы хотите дождаться окончания диалога печати, я бы использовал привязку привязки к окну.

print();

var handler = function(){
    //unbind task();
    $(window).unbind("focus",handler);
}

$(window).bind("focus",handler);

Вставив функцию unbind в функцию обработчика, мы предотвращаем привязку фокусного события к окну.

Ответ 10

Я думаю, что подход к фокусу окна является правильным. Вот пример, в котором я хотел открыть PDF-url blob в скрытом iframe и распечатать его. После печати или отмены я хотел удалить iframe.

/**
 * printBlob will create if not exists an iframe to load
 * the pdf. Once the window is loaded, the PDF is printed.
 * It then creates a one-time event to remove the iframe from
 * the window.
 * @param {string} src Blob or any printable url.
 */
export const printBlob = (src) => {
  if (typeof window === 'undefined') {
    throw new Error('You cannot print url without defined window.');
  }
  const iframeId = 'pdf-print-iframe';
  let iframe = document.getElementById(iframeId);
  if (!iframe) {
    iframe = document.createElement('iframe');
    iframe.setAttribute('id', iframeId);
    iframe.setAttribute('style', 'position:absolute;left:-9999px');
    document.body.append(iframe);
  }
  iframe.setAttribute('src', src);
  iframe.addEventListener('load', () => {
    iframe.contentWindow.focus();
    iframe.contentWindow.print();
    const infanticide = () => {
      iframe.parentElement.removeChild(iframe);
      window.removeEventListener('focus', infanticide);
    }
    window.addEventListener('focus', infanticide);
  });
};

Ответ 11

В Chrome 41.0.. Я должен поставить этот

Я печатаю автоматически на странице загрузки:

<body style="background-color:white;" onload="print_window();">

JS:

function print_window(){
  window.print();
  setTimeout(function () { 
    window.open('', '_self', '');
    window.close();
  }, 100);
}

Он тоже работает для IE 10