выполнение javascript при печати страницы

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

2 ответов


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

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

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

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

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

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

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


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

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

другие актуальные вопросы