2016-05-07 5 views
0

Вопрос: Можно ли добавить обратный вызов к функции windows.print()? Я понимаю, что нет собственного решения, но мне было интересно, есть ли какая-то библиотека, которая это выполняет. Примечание. У меня есть доступ к компьютерам, если мне нужно что-то установить.JavaScript windows.print() callback - определение, когда задание на печать завершено

Фон: Я реализовал решение POS для веб-сайтов, которое работает на Firefox (v44-46). Для некоторых заказов мне нужно распечатать 2 квитанции на принтере Epson TM-T88V.

Задача: Если второй метод windows.print() выполняется, пока первая квитанция все еще печатается, Firefox предлагает «Некоторые функции печати недоступны».

Возможное решение: Я могу увеличить задержку между вызовами печати. Однако это не очень надежное, так как некоторые заказы могут быть довольно длительными, тогда как другие - нет. Это решение может не работать в некоторых случаях и просто замедляет работу других.

Есть ли лучший способ сделать это?

ответ

1

Похоже, вы хотите слушать для afterprint события

window.addEventListener('afterprint', e => console.log('Ready for next print job')); 

Пожалуйста, обратите внимание, что это имеет низкую поддержку кросс-браузер (FireFox 6+, IE)


MDN page также говорит, что что-то подобное может быть достигнуто в браузерах на основе webkit, добавив прослушиватель на matchMedia('print'), чтобы вы могли подделать его, написав для этих браузеров примерно следующее:

window.matchMedia('print').addListener(mql => { 
    if (!mql.matches) { 
     window.dispatchEvent(new Event('afterprint')); 
    } 
}); 

Это должно работать, например, Google Chrome

+0

К сожалению, этот обратный вызов срабатывает после того, как пользователь принимает задание на печать, а не после завершения задания на печать. Хотя, я не думаю, что есть простой способ добиться этого, используя javascript. Принимая этот ответ, поскольку этого может быть достаточно для других. – vanguard