8

Sto cercando di ottenere la messaggistica nativa tra la mia estensione chrome e la mia applicazione C#. Il javascript funziona bene, ma sto ottenendo questo errore:Native Messaging Chrome

Error when communicating with the native messaging host.

L'applicazione venga lanciato insieme con l'estensione, come ho visto da Task Manager. Ecco il mio codice C#.

private static string OpenStandardStreamIn() 
{ 
    //// We need to read first 4 bytes for length information 
    Stream stdin = Console.OpenStandardInput(); 
    int length = 0; 
    byte[] bytes = new byte[4]; 
    stdin.Read(bytes, 0, 4); 
    length = System.BitConverter.ToInt32(bytes, 0); 

    string input = ""; 
    for (int i = 0; i < length;i++)  
    { 
     input += (char)stdin.ReadByte(); 
    } 

    return input; 
} 

private static void OpenStandardStreamOut(string stringData) 
{ 
    //// We need to send the 4 btyes of length information 
    string msgdata = "{\"text\":\"" + stringData + "\"}"; 
    int DataLength = stringData.Length; 
    Stream stdout = Console.OpenStandardOutput(); 
    stdout.WriteByte((byte)((DataLength >> 0) & 0xFF)); 
    stdout.WriteByte((byte)((DataLength >> 8) & 0xFF)); 
    stdout.WriteByte((byte)((DataLength >> 16) & 0xFF)); 
    stdout.WriteByte((byte)((DataLength >> 24) & 0xFF)); 
    //Available total length : 4,294,967,295 (FF FF FF FF) 
    Console.Write(msgdata); 
} 

e la funzione principale:

static void Main(string[] args) 
{ 
    string message = "test message from native app."; 
    OpenStandardStreamOut(message); 

    while (OpenStandardStreamIn() != null || OpenStandardStreamIn() != "") 
    { 
     OpenStandardStreamOut("Received to Native App: " + OpenStandardStreamIn()); 
     OpenStandardStreamOut("Recieved: " + OpenStandardStreamIn()); 
    } 
} 

JS Codice:

var host_name = "com.example.native"; 
var port = null; 

connectToNative(); 
function connectToNative() { 
    console.log('Connecting to native host: ' + host_name); 
    port = chrome.runtime.connectNative(host_name); 
    port.onMessage.addListener(onNativeMessage); 
    port.onDisconnect.addListener(onDisconnected); 
    sendNativeMessage("test"); 
} 

function sendNativeMessage(msg) { 
    message = {"text" : msg}; 
    console.log('Sending message to native app: ' + JSON.stringify(message)); 
    port.postMessage(message); 
    console.log('Sent message to native app: ' + msg); 
} 

function onNativeMessage(message) { 
    console.log('recieved message from native app: ' + JSON.stringify(msg)); 
} 

function onDisconnected() { 
    console.log(chrome.runtime.lastError); 
    console.log('disconnected from native app.'); 
    port = null; 
} 

Host Manifest:

{ 
    "name": "com.example.native", 
    "description": "Native support for Chrome Extension", 
    "path": "NativeApp.exe", 
    "type": "stdio", 
    "allowed_origins": [ 
    "chrome-extension://ajfkjfmkedgcgdckdkmppfblonpeench/" 
    ] 
} 
+0

Qualche idea ragazzi? –

+0

Includere il manifest host nativo e il codice JS-side – Xan

+0

Ho fatto come richiesto a Xan. Per favore aiuto. –

risposta

22

Sì che è perché si invia una lunghezza di dati errati. Cambia stringData.Length a msgdata.Length nella tua funzione OpenStandardStreamOut.

+1

GRAZIE ANCHE !! FINALMENTE HA FATTO LA MIA APP PER LAVORARE! –

+9

@ user3692525 Si prega di contrassegnare la risposta come accettata allora. – Xan

Problemi correlati