Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.08.2017, 13:22
Аспирант
Отправить личное сообщение для paveltkachev Посмотреть профиль Найти все сообщения от paveltkachev
 
Регистрация: 09.04.2014
Сообщений: 74

Печать на принтере изображения
Использую функцию, которая прекрасно печатает из 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;
	    }
Ответить с цитированием
  #2 (permalink)  
Старый 04.08.2017, 13:45
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,703

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

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

Возможно браузер блокирует открытие нового окна, у вас проверка его открытия отсутствует.
Ответить с цитированием
  #3 (permalink)  
Старый 04.08.2017, 15:53
Аспирант
Отправить личное сообщение для paveltkachev Посмотреть профиль Найти все сообщения от paveltkachev
 
Регистрация: 09.04.2014
Сообщений: 74

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

Если убрать

mywindow.print();


то я вижу картинку. А если его вернуть, то в окне печати её нет и на бумаге тоже нет. Это только для Chrome и Opera так, в IE и FireFox картинка есть и во всплывающем окне и на печати.
Ответить с цитированием
  #4 (permalink)  
Старый 04.08.2017, 16:22
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

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

mywindow.onload = function() {

}
Ответить с цитированием
  #5 (permalink)  
Старый 04.08.2017, 16:39
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,703

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

Последний раз редактировалось Nexus, 04.08.2017 в 17:39. Причина: Bugfix, line 1
Ответить с цитированием
  #6 (permalink)  
Старый 04.08.2017, 16:51
Аспирант
Отправить личное сообщение для paveltkachev Посмотреть профиль Найти все сообщения от paveltkachev
 
Регистрация: 09.04.2014
Сообщений: 74

Сообщение от 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 так и не наступает.
Ответить с цитированием
  #7 (permalink)  
Старый 04.08.2017, 16:55
Аспирант
Отправить личное сообщение для paveltkachev Посмотреть профиль Найти все сообщения от paveltkachev
 
Регистрация: 09.04.2014
Сообщений: 74

Причём это во всех браузерах.
Ответить с цитированием
  #8 (permalink)  
Старый 04.08.2017, 17:42
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,703

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


PS. в консоли обязана присутствовать ошибка, т.к. метод «getElementsByTagName» возвращает массив элементов, а повесить обработчик на массив невозможно. Свой комментарий я поправил.
Хреново, что вы игнорируете консоль.
Ответить с цитированием
  #9 (permalink)  
Старый 04.08.2017, 18:33
Аспирант
Отправить личное сообщение для paveltkachev Посмотреть профиль Найти все сообщения от paveltkachev
 
Регистрация: 09.04.2014
Сообщений: 74

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


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

К сожалению, в консоли я не вижу ошибку.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
POST запрос вывод на печать kristow Events/DOM/Window 1 30.12.2015 17:04
Печать изображения jdiond Элементы интерфейса 8 07.03.2014 08:25
Печать строк на принтере Vit Общие вопросы Javascript 9 10.09.2012 21:11
Расчет реальных размеров изображения в галерее Vision Элементы интерфейса 7 10.07.2012 21:56
Вывод изображения на печать. can2zia Events/DOM/Window 0 10.01.2011 14:39