2013-10-13 2 views
0

У меня есть веб-страница с кнопкой «Печать». Эффект, который я хочу, заключается в том, что после того, как диалог печати будет завершен посредством печати или отмены, страница благодарит пользователя за использование нашего сайта.Javascript после window.print() иногда выполняется перед диалогом печати, иногда после

Функция печати выглядит примерно так:

function printThenThank() { 
    window.print(); 
    $('.thankYou').removeClass('hidden'); 
    // alert('debug message'); 
} 

Проблема я нахожу в том, что когда-то «скрытый» спасибо сообщение появляется в распечатке, а иногда нет. Я запускаю его несколько раз, иногда с сообщением об отладочном сообщении, предшествующим модальному типу печати, и иногда предупреждает только после отмены запроса на печать.

Я изначально считал, что window.print() является синхронным вызовом, но, похоже, он больше похож на асинхронный триггер для процесса с модальным диалогом.

Есть ли какой-либо надежный кросс-платформенный способ обеспечения того, что переписывание содержимого, которое я хочу выполнить, не инициируется до тех пор, пока пользователь не захочет распечатать или отменить диалог window.print()?

+0

почему бы не использовать SetTimeout для этого дело? – Dvir

+0

Мне не нравится setTimeout для условий гонки. Если я установил слишком короткий, он может перерисовать элементы страницы перед отображением для печати. Если слишком долго, моя страница, похоже, зависает для быстрого пользователя, который отменил сразу. – phatfingers

ответ

1

Чтобы бороться с условиями гонки, вы можете попробовать запустить функцию setTimeout, но это действительно будет работать только в том случае, если вызов синхронный. Я бы не стал полагаться на это для всех браузеров.

Вместо того, что вы хотите сделать, это скрыть благодарственное вас от печати, даже если она есть:

HTML:

<div class="thankYou no-print">Thanks for printing</div> 

CSS:

@media print {  
    .no-print, .no-print * 
    { 
    display: none !important; 
    } 
} 
+0

Да, это имеет смысл. Хотя я не говорил об этом, есть дополнительные элементы страницы, которые я хочу скрывать после печати, поэтому сообщение «спасибо» заменяет другое содержимое. Я могу использовать ту же технику, которую вы описываете, чтобы скрыть ее только для '@media screen', но сохраняйте их видимыми для' @media print'. – phatfingers

Смежные вопросы