Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Печать на принтере изображения (https://javascript.ru/forum/css-html/70022-pechat-na-printere-izobrazheniya.html)

paveltkachev 04.08.2017 12:22

Печать на принтере изображения
 
Использую функцию, которая прекрасно печатает из FireFox и IE, но не работает в Chrome и Opera. Подскажите, как сделать печать, работающую из всех браузеров?

function Print()
	    {
	        var mywindow = window.open('', 'Лыжный пер., д.2', 'height=566,width=400');
	        mywindow.document.write('<html><head><title>Лыжный пер., д.2</title>');
	        mywindow.document.write('</head><body>');
			
		mywindow.document.write('<img height="100%" width="100%" src="http://xn--2-ktbjgl6fc.xn--p1ai/web.png">');
	        mywindow.document.write('</body></html>');
	 
	        mywindow.focus();
	 
	        mywindow.print();
	        mywindow.close();
	 
	        return true;
	    }

Nexus 04.08.2017 12:45

paveltkachev, у меня этот код в Хроме работает адекватно:
var win=open('','_blank');
win.document.body.innerHTML='ASD';
win.print();
win.close();

В общем-то как и Ваш код.

Возможно браузер блокирует открытие нового окна, у вас проверка его открытия отсутствует.

paveltkachev 04.08.2017 14:53

Простите, я не описал проблему. Картинка не отображается.

Если убрать

mywindow.print();


то я вижу картинку. А если его вернуть, то в окне печати её нет и на бумаге тоже нет. Это только для Chrome и Opera так, в IE и FireFox картинка есть и во всплывающем окне и на печати.

Dilettante_Pro 04.08.2017 15:22

paveltkachev,
попробуйте обернуть часть скрипта с mywindow.document.write и далее в

mywindow.onload = function() {

}

Nexus 04.08.2017 15:39

paveltkachev,
Картинка, скорее всего, не успевает загрузиться.
Вызывайте методы «print» и «close» после того, как изображение загрузится.
Типа так:
mywindow.document.getElementsByTagName('img')[0].onload=function(){
mywindow.print();
mywindow.close();
};

paveltkachev 04.08.2017 15:51

Цитата:

Сообщение от Nexus
Картинка, скорее всего, не успевает загрузиться.
Вызывайте методы «print» и «close» после того, как изображение загрузится.

Я модифицировал код:
var mywindow = window.open('', 'Лыжный пер., д.2', 'height=566,width=400');
	        mywindow.document.write('<html><head><title>Лыжный пер., д.2</title></head><body><img  width="100%" src="http://xn--2-ktbjgl6fc.xn--p1ai/web.png"></body></html>');
			mywindow.document.getElementsByTagName('img').onload=function(){
					mywindow.focus();
					mywindow.print();
					mywindow.close();
			};


Однако, теперь картинка загружается, а вызов печати так и не происходит. Получается, что событие onload так и не наступает.

paveltkachev 04.08.2017 15:55

Причём это во всех браузерах.

Nexus 04.08.2017 16:42

paveltkachev, если в консоли ошибок нет, то в конец добавь это:
if(mywindow.document.readyState=='complete')
    mywindow.document.getElementsByTagName('img')[0].dispatchEvent(new Event('load'));


PS. в консоли обязана присутствовать ошибка, т.к. метод «getElementsByTagName» возвращает массив элементов, а повесить обработчик на массив невозможно. Свой комментарий я поправил.
Хреново, что вы игнорируете консоль.

paveltkachev 04.08.2017 17:33

Цитата:

Сообщение от Nexus (Сообщение 460644)
paveltkachev, если в консоли ошибок нет, то в конец добавь это:
if(mywindow.document.readyState=='complete')
    mywindow.document.getElementsByTagName('img')[0].dispatchEvent(new Event('load'));


PS. в консоли обязана присутствовать ошибка, т.к. метод «getElementsByTagName» возвращает массив элементов, а повесить обработчик на массив невозможно. Свой комментарий я поправил.
Хреново, что вы игнорируете консоль.

Теперь всё работает. Спасибо за помощь!

К сожалению, в консоли я не вижу ошибку.


Часовой пояс GMT +3, время: 17:35.