На некоторых веб-сайтах много изображений, поэтому lazyloading кажется подходящим для сокращения времени загрузки и потребления данных. Но что, если вам также нужно поддерживать печать для этого веб-сайта?
Я имею в виду, вы можете попытаться обнаружить событие печати, а затем загрузить изображения с чем-то вроде этого:
HTML
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7">
Примечание: это изображение размером в один пиксель gif.
JavaScript
window.addEventListener('DOMContentLoaded', () => {
img = document.querySelector('img');
var isPrinting = window.matchMedia('print');
isPrinting.addListener((media) => {
if (media.matches) {
img.src = 'http://unsplash.it/500/300/?image=705';
}
})
});
Примечание: если вы попробуете это на игровой площадке кода, удалите событие DOMContentLoaded
(или просто выполните следующие действия: JSFiddle | Codepen).
Примечание. Я не стал беспокоиться о onbeforeprint
и onafterprint
для очевидных причин.
Это будет работать отлично, если изображение будет кэшировано, но опять же, что точно не точка. Изображение/с должны загружаться, а затем отображаться на экране печати.
Есть ли у вас идеи? Кто-нибудь успешно реализовал плагин lilyloading для печати?
Update
Я попробовал перенаправить пользователя после обнаружения диалогового окна печати на отмеченную версию веб-сайта a.k.a website.com?print=true
, где lazyloading отключен и все изображения загружаются нормально.
Этот метод улучшен путем применения метода window.print()
в этой флагманской готовой к печати версии страницы, открывая новый диалог печати после завершения загрузки всех изображений и показывая сообщение "дождитесь его" в верхней части страницы.
Важное примечание: этот метод был протестирован в Chrome, он не работает в Firefox и Edge (следовательно, почему это не ответ, а свидетельство).
Он работает в Chrome, который закрывает диалоговое окно печати при перенаправлении на другой веб-сайт (в этом случае тот же URL-адрес, но помечен). В Edge и Firefox диалог печати является фактическим окном, и он не закрывает его, что делает его довольно непригодным.