Как подключить расширение chrome web с сервером localhost?

у меня есть веб-расширение google chrome, которое должно взаимодействовать с настольным приложением Qt - но как?

  • есть собственный обмен сообщениями chrome, но поскольку я хочу поддерживать несколько браузеров/ОС, это будет слишком много усилий, потому что это только для chrome.

  • то есть этой сообщение, которое предлагает настроить локальный сервер. Вот что я сделал, смотрите ниже.

Я настроил сервер с Qt с QTcpServer использует QTcpSocketна 127.0.0.1 (localhost). Но веб-расширение не может слушать сокеты, только chrome apps can. На мой взгляд, есть 2 возможных решения:

  • в качестве обходного пути я мог бы написать небольшое приложение chrome. Приложение Qt будет разговаривать с расширением chrome через приложение chrome (chrome apps support sockets). Но я думаю, что этот метод неуклюжий и не совсем элегантный.

  • на другой стороны, я читал о socket.io. Идея: расширение chrome говорит через http requests с гнездом.io и сокет.io разговаривает через сокеты с моим настольным приложением. Возможно ли такое решение?

то, что я также пытался, это напрямую подключиться к локальному серверу со следующим кодом. В моем приложении Qt server я вижу, что есть новое соединение. Но я не могу получить ответ вообще (либо мой Qt-код неверен, либо это потому, что расширения не могут слушать розетки?)

var xhr = new XMLHttpRequest();
xhr.open("GET", "http://localhost:12345", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
  alert('This is the response from the server: '+ xhr.responseText );
}

1 ответов


Как вы уже знаете расширения могут не создать прямое сообщение:

Google Chrome Socket API в расширениях

возможное решение

возможно, ваше приложение QT может служить websocket, и вы должны иметь возможность общаться с этим из Javascript:

http://www.html5rocks.com/en/tutorials/websockets/basics/

Если вы не можете обслуживать websockets из внутри приложения QT другим подходом может быть создание "моста" небольшого скрипта, который может служить websocket для вашего JavaScript и передавать сообщения из/в приложение QT

вы найдете много примеров на websockets, простой способ попасть в это может быть создание небольшого сервера с помощью узла.js, чтобы играть с ним stackabuse.com/node-js-websocket-examples-with-socket-io/

о! и выполните поиск "websocket же политики происхождения"

пример расширения с использованием websockets (что будет полезно для отладки): chrome.google.com/webstore/detail/simple-websocket-client/pfdhoblngboilpfeibdedpjgfnlcodoo?hl=en

надеюсь, что это помогает