Der native Chrome-Host in C ++ kann nicht mit Chrome kommunizieren

7

Ich versuche, eine Chrome-Erweiterung mit runtime.connectNative und postMessage zu implementieren. Ich verfolge die Chrome-Dokumentation, lade das native Messaging-Beispiel herunter und ändere die native App in C ++.

Die native App kann die Nachricht jedoch nicht von der Chrome-Erweiterung empfangen.

Wenn die native App, die die Funktion printf verwendet, eine Nachricht an die Chrome-Erweiterung schreibt, kann die Erweiterung nicht empfangen werden und die Nachricht wird nur in der Konsole angezeigt.

Irgendwelche Ideen, wie man das Problem löst?

    
katherine 27.10.2014, 07:10
quelle

2 Antworten

17

Sie haben nicht viele Informationen über das, was Sie tatsächlich versucht haben, bereitgestellt. Daher werde ich mein Bestes geben, um die erforderlichen Schritte zur Implementierung der Chrome-Erweiterung, des Native Messaging-Hosts und der Herstellung der Kommunikation zwischen ihnen zu erläutern. (Unter folgendem Link erhalten Sie weitere Informationen zum Native Messaging von Chrome: Chrome Native Messaging How to .

CHROM-VERLÄNGERUNG

Zunächst müssen wir die Chrome-Erweiterung einrichten. Da dies eine sehr einfache Erweiterung sein wird, benötigen wir nur die Datei manifest.json (bitte beachten Sie, dass dies die Manifestdatei der Erweiterung ist - der native Host wird auch eine eigene Manifestdatei haben) und background.js javascript implementation.

Die folgende Beispieldatei manifest.json :

%Vor%

Wichtig ist hier, dass die Implementierung in background.js bereitgestellt wird, die unterstützte Chrome-Version ist mindestens 29 und HTTP und HTTPS werden beide unterstützt.

Als nächstes hat die Datei background.js folgenden Inhalt:

%Vor%

Der Code selbst ist ziemlich selbsterklärend - wir versuchen, eine Verbindung zum nativen Host herzustellen, der durch den Schlüssel com.dolby.native_messaging_host identifiziert wurde (ich komme gleich darauf). Dann registrieren wir einen Listener für das Ereignis onMessage (dieses Ereignis wird ausgelöst, wenn der native Host eine Nachricht an die Chrome-Erweiterung sendet). Wir registrieren auch einen Listener für das Ereignis disconnect (wenn beispielsweise der native Host stirbt, wird dieses Ereignis ausgelöst). Und schließlich senden wir eine Nachricht mit der Methode postMessage.

NATIVE MESSAGING HOST

Jetzt hat der native Host auch seine eigene manifest.json-Datei. Sehr einfache manifest.json-Datei für nativen Host ist wie folgt:

%Vor%

Ein paar interessante Dinge hier: Name identifiziert den Schlüssel, unter dem dieser native Host registriert ist. Der Pfad ist der vollständige Pfad zur nativen Host-Programmdatei. Art der Kommunikation stdio bedeutet, dass wir Standard-Input / Output für die Kommunikation verwenden (nur Typ derzeit unterstützt). Und schließlich geben allowed_origins an, welche Erweiterungen mit diesem nativen Host kommunizieren können - , damit Sie herausfinden müssen, was der Schlüssel Ihrer Erweiterung ist! .

Der nächste Schritt besteht darin, diesen Native Messaging-Host in der Registrierung (für Windows) zu registrieren und den Speicherort für seine Manifestdatei anzugeben. Die folgenden Screenshots erklären, wie dies für Windows funktioniert (siehe den bereitgestellten Link, um herauszufinden, wie dies unter OSX und Linux funktioniert):

Nachdem Sie den Registrierungseintrag für Ihren nativen Host hinzugefügt haben, müssen Sie nur noch Ihren nativen Host schreiben. Der folgende C ++ - Code implementiert einen einfachen nativen Host, der Nachrichten von der Standardeingabe liest und die Antwort auf die Standardausgabe schreibt (wenn Sie die Nachricht # STOP # an den nativen Host-Exit senden):

%Vor%

Nachrichten, die von der Nebenstelle an den nativen Host gesendet werden, werden so gebildet, dass das erste Byte die Anzahl der Bytes in der Nachricht speichert. Das erste, was der native Host tun muss, ist, die ersten 4 Bytes zu lesen und die Größe der Nachricht zu berechnen. Ich habe erklärt, wie man das in einem anderen Beitrag tut, der hier gefunden werden kann:

Wie Größe von berechnen die Nachricht, die von der Chrome-Erweiterung gesendet wird

    
dbajgoric 27.10.2014, 08:55
quelle
4

Für zukünftige Google-Leute, hier ist, wie ich es mache:

C-Stil

Lesen

%Vor%

Schreiben

%Vor%

C ++ - Stil

Lesen

%Vor%

Schreiben

%Vor%     
user1112789 28.01.2016 11:31
quelle