function openWindowAndPrint(context, title = 'Документ') {
const win = window.open();
win.document.write(context);
win.document.title = title;
win.focus(); // Required for IE
ensureImagesLoaded(win.document).then(() => win.print());
win.onafterprint = () => win.close();
return win;
}
function ensureImagesLoaded(document, waitTime = 7000) {
const images = document.querySelectorAll('img');
const loadedList = Array.from(images).map(imageLoadToPromise);
const timeout = new Promise(resolve => setTimeout(resolve, waitTime));
return Promise.race([timeout, Promise.all(loadedList)]);
}
function imageLoadToPromise(img) {
return new Promise(resolve => img.addEventListener('load', resolve));
}
Еще можно открывать для печати специально подготовленную страницу, на который скрипт слушает событие message.
И отправлять примерно так
win.onload = () => win.postMessage({
method: 'sendFileData',
payload,
}, '*');
windows.open(). Если вызывать через onclick, проблем с блокировкой окна быть не должно?
Обычно браузеры не блокирует попапы, вызванные действиями пользователя.
p.s. Если кто знает способ попроще узнать момент, когда загрузились все картинки - welcome