выполнить JavaScript при печати страницы - PullRequest
8 голосов
/ 04 октября 2011

при печати страницы код javascript, похоже, выполняется.
как я могу определить, печатается ли страница в данный момент? Я делаю некоторые изменения размера js, и мне приходится обрабатывать печать немного по-другому.

Ответы [ 2 ]

9 голосов
/ 04 октября 2011

Вы не можете, кроме браузеров IE.Ни у одного другого браузера нет события перед печатью.Однако вы можете настроить таргетинг на конкретную таблицу стилей, чтобы применять ее только во время печати:

<!-- In head -->
<link rel="stylesheet" type="text/css" media="print" href="print.css" />

Эта таблица стилей будет применена перед печатью.Это позволяет вам вносить некоторые удивительные изменения, в том числе скрывать основные разделы, перемещать элементы и выполнять стилизацию только для печати, например разрывы страниц.

Другой вариант - предоставить пользователю «Распечатать эту страницу».кнопка.Эта кнопка может обрабатывать ваш JavaScript, вызывать window.print() и отменять изменения:

function printMe() {
    // perform changes
    window.print();
    // revert changes
}

Метод window.print() всегда блокирует (в каждом браузере, который я тестировал), поэтому можно сразу же вернутьменяется после.Однако, если пользователь решит печатать через меню или панель инструментов, вам не повезет.

Один из способов, которым я справился с этим делом в сложном веб-приложении, заключался в том, чтобы иметь таблицу стилей для печати, которая скрывала все, кроме специальногоDIV.Если пользователь нажмет на печать, он получит предупреждающее сообщение.Если они нажмут кнопку печати, то этот div будет заполнен правильной информацией.Это не здорово, но, по крайней мере, они не получили несколько страниц мусора.

3 голосов
/ 04 октября 2011

AFAIK нет общей возможности. В IE есть onbeforeprint и onafterprint, которые теперь добавлены также в Firefox 5/6 + (я точно не знаю). Попробуйте использовать print специфические таблицы стилей

<link rel="stylesheet" href="print.css" type="text/css" media="print" /> 

Другие соответствующие вопросы

...