Google Chrome Custom URI-Scheme перенаправление на JS

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

Например. Если ссылка перенаправления/якоря указывает на этот пример uri

testuri://thismessage/additionaldata

то я хотел бы как-то перенаправить обратно в JS. т.е. с призывом сказать

function protocolMessage(data) { ... }

Я изучил использование «navigator.registerProtocolHandler», но для этого требуется использование «web + testuri», что не является вариантом (если только кто-то не знает настройки, которые можно использовать для отключения этого).

Я исследовал использование пользовательского расширения chrome для захвата uri в webNavigation, но он не фиксирует ничего, кроме схем http (s). И никаких функций, которые позволили бы мне напрямую прописать кастомную схему, я тоже не вижу.

Дальнейшее расследование привело меня к попытке обратиться к системному приложению (с использованием пользовательских uri-схем, которые вызывают собственные исполняемые файлы), и это частично работает, но теперь я застрял в том, как перенаправить это сообщение обратно в javascript текущей страницы/вкладки.

Я также просмотрел NaCL (Pepper API), но, похоже, он также не позволяет регистрировать пользовательские схемы.

Я надеюсь на лучшее решение, чем звонить и возвращаться в браузер, но если нет, может ли кто-нибудь пролить свет на хорошее надежное решение для повторного использования?

Любые идеи? Заранее спасибо


person Tim Johnson    schedule 20.04.2015    source источник


Ответы (1)


Насколько мне известно, нет, к сожалению.

Все API Chrome работают с «поддерживаемыми схемами», и вы не можете их добавить.

web+custom: также является негибким ограничением.

Если у вас есть системное приложение, вы можете общаться с ним, предоставив сервер WebSocket в приложении или работая с Native Messaging.

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

person Xan    schedule 20.04.2015
comment
Вот этого я и боялся, спасибо за помощь. Таким образом, похоже, что единственный способ — создать стороннее приложение, к которому веб-страница должна будет подключиться. Хотя ваше предложение по использованию WebSockets — это идея, которая будет лучше, чем создание расширения. - person Tim Johnson; 20.04.2015
comment
Возможно, стоит задать это как запрос функции. Я сделал краткий обзор багтрекера, есть очень старый запрос относительно этого в расширениях. Я говорю, что стоит еще раз взглянуть, даже если они реализуют его только для приложений Chrome (что вполне вероятно). - person Xan; 20.04.2015