Я хочу из своего веб-приложения, то бишь из жаваскрипта на сайте взаимодействовать с тем, с чем жаваскрипту взаимодействовать не дают никак, нет такого API. Ну для простоты - устанавливать TCP-соединения по произвольному протоколу. Или общаться с USB-устройствами не из разряда webusb/serial/hid. Или ещё что-нибудь, не суть.
Самый популярный вариант: пишем приложение, которое запускается у клиента. Приложение поднимает HTTPS-сервер. Также клиенту в доверенные корни добавляем самосгенерированный сертификат, которым пользуется это приложение. Сайт с приложением соединяется по websocket (ну или через обычный https) и далее уже взаимодействует.
Минусы: нужно ставить самоподписанный сертификат, нужно ставить программу в автостарт.
Модификация этого варианта - пытаемся получить подписанный сертификат от какого-нибудь леценкрипта. Это можно, но очень геморройно в разработке, по крайней мере если делать это секурно. Собственно это основной минус. Ещё минус - у леценкрипта лимиты и если у тебя много таких точек, ты в них можешь упереться, придётся или идти к нему на поклон, или морочиться ещё больше с кучей доменов.
Модификация этого варианта это включить #allow-insecure-localhost в chrome://flags, не тестировал этот вариант, точно не знаю, как оно работает.
Модификация этого варианта это подождать, пока реализуют Issue 589141: *.localhost should be considered secure. Тогда можно будет просто слушать http и не морочить себе голову. Но это не точно.
Самый «правильный» вариант - работать через browser extension, который с помощью native messaging будет общаться с запущенным нативным приложением. Но browser extension надо ставить через chrome web store, в котором модераторы, зависеть от которых не очень хочется.
Модификация «правильного» варианта - включаем режим разработчика в браузере и грузим расширение из файловой системы. Но стрёмно всё это и не правильно.
Все варианты установки расширения в браузер из отдельного приложения вроде как убрали.
Самый простой вариант - слать с локальной программулины данные на свой сервер, а со своего сервера уже слать в браузер. Но тут будет латентность и теряется возможность оффлайн-работы.
Подскажите, какие варианты я мог упустить.