Возможно ли отображать оповещение, когда пользователь сообщает браузеру распечатать страницу?

#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. Это явно отключает печать страницы, не так ли?