Почему печать на основе javascript заставляет Safari обновлять страницу?

На странице, над которой я работаю, есть функция 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: Как объясняется в комментариях, открытие нового окна, содержащего текущее состояние приложения, затем печать и закрытие этого окна, может быть исправлением, но я не считаю это достаточным решением проблемы.

27
задан kontur 24 February 2012 в 08:52
поделиться