BuggyBuggy
@BuggyBuggy

Почему в мозилле при печати конкретного блока пропадают картинки?

Добрый день.
Печатаю часть страницы с блоками (скрин диалога печати из Хрома):
1A53RP0FDK0xnm.jpg
В Мозилле при печати каждый раз меняется отображение картинок: то их нет всех (вместо них пустое место с alt), есть несколько картинок, остальных нет. Можно распечатать два раза подряд и получить разное отображение.
Например, вот (скрин печати в PDF из мозиллы):
LmGL71KTwR4GO2.jpg
Повторная печать через несколько секунд после обновления страницы:
Dr8Xo5pcokZ95r.jpg
Повторная печать через несколько секунд после обновления страницы:
bmoqB4eC3MNeJA.jpg
Но после обновления через Ctrl+F5 картинки пропадают, и всё по новой.
Такое ощущение, что браузер постепенно подгружает картинки по мере обновлений страницы, и потом после нескольких обновлений печатает нормально.

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

А иногда даже и постепенно не подгружаются.
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
BuggyBuggy
@BuggyBuggy Автор вопроса
Проблема не была решена, т.к., видимо сложность была именно в реализации печати с созданием iframe, копирования туда содержимого блока. А вот уже в этом iframe, видимо была проблема со ссылками к картинкам. А со второго раза он уже брал из кеша.

Печать организовал гораздо более простым способом:
0. Имеем div, содержимое которого надо распечатать (.block).
1. Добавляем пустой div на верхний уровень разметки (.to-print).
2. весь контент страницы заключаем в другой div (.content).
<body>
<div class="to-print"></div>
<div class="content">
<!--содержимое страницы-->
</div>
</body>

3. В CSS добавляем:
.to-print {display: none;} /*Скрываем этот блок на экране*/

@media print {
	.to-print { display: block; } /*Отображаем блок на печати*/
	.content { display: none; } /*Скрываем весь контент на печати*/
}

4. JS, по нажатию на кнопку печати - событие .click():
$('.to-print').html( $('.block').html() ); //копируем требуемое содержимое в скрытый блок
window.print(); //запускаем на печать всю страницу

Т.к. при печати будет видно только содержимое скрытого блока, то оно-то и пойдёт на печать. Пользователь ничего не заметит, т.к. всё происходит в "сумраке" печати.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы