2010-07-27 4 views
1

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

var browser_name = navigator.appName; 

if(browser_name == 'Microsoft Internet Explorer'){ 
    window.attachEvent("print()",on_print_function);//I realize I cannot attach an event listener to a function, I just wanted you to see what I am trying to accomplish 
} 

else{ 
    window.addEventListener("print()",on_print_function,false); 
} 

Функция, которая вызывается, когда print событие происходит возвращает страницу, которая хранит некоторую информацию в базе данных.

Моя цель заключается в том, чтобы печать страницы была ТОЛЬКО, если информация, о которой идет речь, будет храниться в базе данных. Я открыт для лучших способов решения этой проблемы, но я думаю, что у меня все будет хорошо, если я могу просто получить событие для print(), как я уже сказал.

EDIT

Я даю на это сейчас, я остановился еще один способ делать то, что я хочу. Я с нетерпением жду того дня, когда FireFox поддерживает onbeforeprint() и onafterprint().

ответ

1

Ну, насколько я знаю, IE имеет несколько линий событий onbeforeprint() и onafterprint(), но они не поддерживаются другими браузерами. Поэтому полагаться на это не очень хорошо.

Возможно, у вас есть кнопка печати на вашей странице. Прикрепите к нему обработчик, который выполняет вызов ajax на сервере для хранения данных в базе данных и успеха этого вызова, вызовите print() в окне.

Это то, что вы ищете?

+0

Кнопка печати является вариант, но я действительно хочу, чтобы поймать, когда люди идут в 'Файл> Печать '. Функция 'onbeforeprint()' будет работать для меня, если бы я был связан только с IE, но мне тоже нужно работать в FireFox. Мой другой вопрос имеет такую ​​справочную информацию: http://stackoverflow.com/questions/3339789/onbeforeprint-and-onafterprint-equivalent-for-non-ie-browsers-php-mysql-ja – ubiquibacon

+0

Ну, насколько я знаю другие браузеры не поддерживают эти события, и у вас будут проблемы с ними. Возможно, несколько иной подход. Являются ли эти данные формой на странице? Могут ли эти данные быть отправлены на pageload? Возможно ли перемещение пользователя на страницу для печати после кнопки «Отправить» на странице? – sTodorov

+0

Проблема в том, что страница, с которой я имею дело, представляет собой серию клиентских счетов, которые будут автоматически отправляться по почте при печати. Страница является просто обзором, если пользователь не распечатывает страницу, но если они печатают страницу, тогда необходимо обновить базу данных, чтобы сказать, что счета были напечатаны и отправлены по почте.Я не могу воспользоваться возможностью, чтобы пользователь печатал счета, а база данных не обновлялась. Мне нужно, чтобы они произошли один за другим. – ubiquibacon

0

Видимо, теперь вы можете слушать это с Firefox (но не в других браузерах):

Некоторые браузеры (включая Firefox 6 и более поздних версий и Internet Explorer) отправить BeforePrint и afterprint событий, чтобы содержание определить, когда печать может произошло. Вы можете использовать это для настройки пользовательского интерфейса, представленного во время печати (например, путем отображения или скрытия элементов пользовательского интерфейса во время процесса печати).

Событие afterprint создается после того, как пользователь печатает или прерывает диалог печати.

https://developer.mozilla.org/en-US/docs/Web/API/window.onafterprint

Вы можете быть в состоянии эмулировать с запросами средств массовой информации в других браузерах: https://stackoverflow.com/a/18325463/421243

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