Подтвердить что ты не робот

Расширение Google Chrome: печать страницы беззвучно

Я разрабатываю внутреннее расширение Google Chrome, для которого требуется начать печать текущей страницы на принтер. Я не хочу, чтобы диалоговое окно Print по умолчанию появилось (так что javascript: window.print() не может быть и речи).

Насколько я понимаю, это невозможно с помощью JS + HTML-плагина, поэтому я также открыт для использования плагина NPAPI (с фиктивным типом mime). И я заинтересован только в платформе Windows.

Я также открыт для различных хаков/обходных решений, если это возможно, хотя стандартное решение было бы приятным.

Если вы считаете, что это невозможно, сообщите мне, знаете ли вы, что какой-либо запрос функции зарегистрирован для него?

Любые предложения/разъяснения приветствуются.

4b9b3361

Ответ 1

В chrome (v18 +) у нас есть переключатели --kiosk --kiosk-printing. Можно распечатать автоматически принтер по умолчанию без подтверждения печати. ​​

Вы можете видеть это из этого видео http://www.youtube.com/watch?v=D6UHjuvI7IE

Ответ 2

Так как NPAPI позволяет создавать собственные плагины С++, с которыми вы можете взаимодействовать через тег объекта (который вы можете использовать из расширения), вероятно, это будет способ сделать это.

Трудный бит заключается в том, что я не знаю, как получить биты для печати страницы. Единственный, кого я знаю о том, кто сделал что-то похожее на это, получил обработчик окна для браузера (доступный через NPAPI) и очистил биты от него, чтобы напечатать этот путь, но это не будет учитывать таблицы стилей печати или что-то еще, Вы также можете попробовать использовать события автоматизации, чтобы попытаться управлять диалогом печати, но я понятия не имею, будет ли это работать или нет.

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

В любом случае, если вы найдете способ сделать это с помощью С++, вы можете использовать FireBreath, чтобы облегчить создание плагина NPAPI.

Ответ 3

Существуют различные расширения, которые принимают моментальные снимки текущей веб-страницы (например, этот); вы можете адаптировать его для отправки изображения на принтер через плагин NPAPI.

Ответ 4

Недавно я искал аналогичную возможность, и, похоже, это было бы вполне возможно с помощью новой айки с поддержкой новых сообщений Chrome.

https://developer.chrome.com/extensions/nativeMessaging

Есть много примеров этого с С#, но вот один из примеров быстрого устранения неполадок, связанных с Chrome, с помощью базового приложения С#

Встроенный обмен сообщениями с расширением chrome на собственный хост, написанный на С#

Я понимаю, что это может быть поздно и коротко, но в случае, если кто-то еще столкнется с этим вопросом, это решение, которое сработало для меня. Изнутри приложения С# вы можете напрямую печатать на установленных принтерах с помощью класса PrintDocument. Если вы выяснили способ получить изображение страницы, это будет намного проще, чем использование firebreath или NPAPI.