На странице, над которой я работаю, есть функция javascript, выполняемая для печати части страницы. По какой-то причине печать в Safari заставляет окно каким-то образом обновляться. Я говорю "каким-то образом", потому что на самом деле оно не обновляется в смысле перезагрузки страницы, а скорее начинает "рендеринг" страницы с самого начала, т.е. прокрутка к верху, флеш-анимация начинается с 0 и т.д.
Эффект воспроизводится с помощью этой скрипки: http://jsfiddle.net/fYmnB/
Нажатие на кнопку печати и завершение или отмена печати в Safari приводит к тому, что экран на секунду "становится белым", что на моем реальном сайте проявляется как нечто "похожее" на перезагрузку. В то время как нажатие кнопки печати, скажем, в Firefox, просто открывает и закрывает диалог печати, никак не влияя на страницу скрипки.
Есть ли что-то в моем способе вызова метода печати браузера, что вызывает это, или как это можно объяснить - и, желательно, избежать?
P.S.: На моем реальном сайте то же самое происходит с Chrome. Однако в примере Chrome, похоже, не демонстрирует такого же поведения, как Safari.
Edit: Я также пытался разместить кнопку печати не в a
якоре, а в другом теге, например span
или button
, но это не помогло решить проблему.
Edit: Я столкнулся с этой проблемой в Safari 5.1.2 на Mac OS 10.6.8. В примере jsfiddle поведение проявляется в виде белого "мерцания", которое охватывает весь браузер после нажатия кнопки печати и закрытия (либо печати, либо прерывания) диалога печати.
Редактирование: Только что запустил вознаграждение за этот вопрос, так как я все еще ищу объяснение этому поведению браузера. Я более чем готов предоставить более подробную информацию по этому вопросу. Из моего опыта на SO не рекомендуется публиковать ссылки на страницы в Интернете, однако я чувствую, что проблему действительно трудно воспроизвести. Я думаю, что "мерцание и повторный рендеринг", который я испытываю с размещенным jsfiddle, надеюсь, является результатом той же проблемы.
Edit: Как объясняется в комментариях, открытие нового окна, содержащего текущее состояние приложения, затем печать и закрытие этого окна, может быть исправлением, но я не считаю это достаточным решением проблемы.