Как определить окно 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
Как определить всплывающее окно печати закрыто или печать завершена?
Ответы
Ответ 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