Подтвердить что ты не робот

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

На странице, на которой я работаю, есть функция javascript, выполняемая для печати частей страницы. По какой-то причине печать в Safari заставляет окно как-то обновляться. Я как-то говорю, потому что он действительно не обновляется, как при перезагрузке страницы, а скорее запускает "рендеринг" страницы с начала, т.е. Прокручивает вверх, а флеш-анимации начинаются с 0 и т.д.

Эффект воспроизводится этой скрипкой: http://jsfiddle.net/fYmnB/

Нажатие кнопки печати и завершение или отмена печати в Safari заставляет экран "белым" в течение секунды, который на моем реальном веб-сайте проявляется как "перезагрузка". При запуске кнопки печати, скажем, с помощью Firefox, открывается и закрывается диалог печати без какого-либо влияния на страницу скрипта.

Есть ли что-то с моим способом вызова метода печати браузеров, который вызывает это, или как его можно объяснить - и желательно избегать?

P.S.: На моем реальном сайте то же самое происходит с Chrome. В примере скрипта Chrome, похоже, не показывает то же поведение, что и Safari.

Изменить: я также попытался использовать кнопку печати на другом теге, чем якорь a, например span или button, но это не помогло решить проблему.

Изменить: я столкнулся с этой проблемой с Safari 5.1.2 в Mac OS 10.6.8. В примере jsfiddle поведение отображается как "мерцание" белого цвета, которое охватывает весь браузер после нажатия кнопки печати и закрытия (либо печати, либо прерывания) диалога печати. ​​

Изменить: только началось щедрость за этот вопрос, так как я все еще ищу объяснение для этого поведения браузера. Я более чем готов дать более подробную информацию по этому вопросу. Из моего опыта по SO не рекомендуется размещать ссылки на онлайн-страницы, однако я чувствую, что проблема действительно трудно воспроизвести. Я думаю, что "мерцание и повторное рендеринг", которое я испытываю с опубликованным jsfiddle, мы надеемся, является результатом одной и той же проблемы.

Изменить: Как объяснено в комментариях, открытие нового окна, содержащего текущее состояние приложения, затем печать и закрытие этого окна, может быть исправлением, но я не считаю его достаточным ответом на проблему,

4b9b3361

Ответ 1

Я не уверен, что это исправит вашу проблему, но недавно я нашел очень хороший плагин JQuery для печати только определенной части вашей веб-страницы.

Вам следует попробовать: у него есть очень интересные параметры, чтобы настроить его на ваши нужды.

Посмотрите здесь.

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

У меня была такая же проблема вчера, и этот плагин jquery действительно помог мне. Я надеюсь, что это тоже поможет.

Приятного дня!

Ответ 2

Если вы не можете понять, как устранить проблему, вы можете быстро решить эту проблему: var win=window.open() та же самая страница, на которой вы находитесь то win.print() it, то win.close(). Надеюсь, это поможет.

Ответ 3

К сожалению, у меня нет решения. но поскольку я смог воспроизвести это в Safari и Webkit со скрипкой, я подумал, что, по крайней мере, буду предлагать свои наблюдения:

  • Пробел не происходит, если вы сразу нажали кнопку "Печать" . Вам нужно подождать несколько секунд, прежде чем вы нажмете "Печать" , чтобы увидеть белый. На OSX 10.6.8 я вижу порог, отмеченный появлением вращающегося морского шара.
  • Когда мышь остается неподвижной, так как нажата кнопка "Печать" , страница остается белой, пока вы не переместите мышь снова (пляжный мяч все еще вращается).

Надеюсь, это поможет как-то.

Ответ 4

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

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