04.08.2017, 12:22
|
Аспирант
|
|
Регистрация: 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;
}
|
|
04.08.2017, 12:45
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,795
|
|
paveltkachev, у меня этот код в Хроме работает адекватно:
var win=open('','_blank');
win.document.body.innerHTML='ASD';
win.print();
win.close();
В общем-то как и Ваш код.
Возможно браузер блокирует открытие нового окна, у вас проверка его открытия отсутствует.
|
|
04.08.2017, 14:53
|
Аспирант
|
|
Регистрация: 09.04.2014
Сообщений: 74
|
|
Простите, я не описал проблему. Картинка не отображается.
Если убрать
mywindow.print();
то я вижу картинку. А если его вернуть, то в окне печати её нет и на бумаге тоже нет. Это только для Chrome и Opera так, в IE и FireFox картинка есть и во всплывающем окне и на печати.
|
|
04.08.2017, 15:22
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
paveltkachev,
попробуйте обернуть часть скрипта с mywindow.document.write и далее в
mywindow.onload = function() {
}
|
|
04.08.2017, 15:39
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,795
|
|
paveltkachev,
Картинка, скорее всего, не успевает загрузиться.
Вызывайте методы «print» и «close» после того, как изображение загрузится.
Типа так:
mywindow.document.getElementsByTagName('img')[0].onload=function(){
mywindow.print();
mywindow.close();
};
Последний раз редактировалось Nexus, 04.08.2017 в 16:39.
Причина: Bugfix, line 1
|
|
04.08.2017, 15:51
|
Аспирант
|
|
Регистрация: 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 так и не наступает.
|
|
04.08.2017, 15:55
|
Аспирант
|
|
Регистрация: 09.04.2014
Сообщений: 74
|
|
Причём это во всех браузерах.
|
|
04.08.2017, 16:42
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,795
|
|
paveltkachev, если в консоли ошибок нет, то в конец добавь это:
if(mywindow.document.readyState=='complete')
mywindow.document.getElementsByTagName('img')[0].dispatchEvent(new Event('load'));
PS. в консоли обязана присутствовать ошибка, т.к. метод «getElementsByTagName» возвращает массив элементов, а повесить обработчик на массив невозможно. Свой комментарий я поправил.
Хреново, что вы игнорируете консоль.
|
|
04.08.2017, 17:33
|
Аспирант
|
|
Регистрация: 09.04.2014
Сообщений: 74
|
|
Сообщение от Nexus
|
paveltkachev, если в консоли ошибок нет, то в конец добавь это:
if(mywindow.document.readyState=='complete')
mywindow.document.getElementsByTagName('img')[0].dispatchEvent(new Event('load'));
PS. в консоли обязана присутствовать ошибка, т.к. метод «getElementsByTagName» возвращает массив элементов, а повесить обработчик на массив невозможно. Свой комментарий я поправил.
Хреново, что вы игнорируете консоль.
|
Теперь всё работает. Спасибо за помощь!
К сожалению, в консоли я не вижу ошибку.
|
|
|
|