#javascript #internet-explorer #firefox
#javascript #internet-explorer #firefox
Вопрос:
Клиенту необходимо, чтобы пользователю отображалось оповещение при попытке распечатать (либо с помощью Ctrl P, либо File / Print) что-либо из браузера, например «Помните, что не следует печатать более x страниц» или что-то в этом роде. Возможно ли это, используя Javascript, CSS или любой другой подход?
Ответ №1:
К сожалению, нет. Вы можете вызвать диалоговое окно печати из JavaScript, но вы не можете его перехватить. Единственный способ сделать что-то подобное — использовать ActiveX только в Internet Explorer, что просто некрасиво.
Ответ №2:
Это невозможно. Своего рода обходным путем могло бы стать открытие соответствующей страницы в отдельном окне без меню. Таким образом, пользователь не может напрямую щелкнуть Файл-> Печать. Если вы хотите быть уверенным, вы могли бы также захватить правую кнопку мыши и запретить открытие контекстного меню.
Затем вы добавите ссылку «распечатать страницу» с javascript, включающим ваше оповещение.
Не очень элегантно — я знаю.
Комментарии:
1. Однако Control-P все еще был бы возможен.
2. Это верно, но должна быть возможность перехватить это в обработчике keydown
$(document).keydown(...)
Ответ №3:
Есть решение с window.onbeforeprint / window.matchMedia
function beforePrint() {
alert('Remember print only X copies');
}
function afterPrint() {
//do something
}
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://jsfiddle.net/mowglisanu/FY4q2/
Обнаружение запросов на печать с помощью JavaScript
По какой-то причине beforeprint срабатывает дважды в Chrome, хотя.
Ответ №4:
однако вы можете использовать css, чтобы остановить печать
<style type="text/css" media="print">
body{visibility:hidden;} or use display:none;
</style>
Комментарии:
1. Это явно отключает печать страницы, не так ли?