Собственное сообщение Chrome

Я работаю над примером приложения "Chrome Native Messaging". Я сделал весь набор в соответствии с шагами, упомянутыми на веб-сайте. Я также могу запустить приложение, однако я не получаю ответное сообщение от собственного приложения. Когда я запускаю расширение в первый раз, я получаю ответное сообщение.

Загружен образец отсюда

Когда я отправил сообщение из собственного приложения браузера, не отвечая на него, проверьте изображение ниже

введите здесь описание изображения

Код C#, как показано ниже

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());
        }
    }

    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 = msgdata.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);
    }

manifest.json как показано ниже

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

Где-то я чувствую, что мы не получаем ответа от собственного хоста, потому что я добавил точку отладки к следующему коду в браузере, который не попадает

function onNativeMessage(message) {

appendMessage("Получено сообщение: " + JSON.stringify(сообщение) + ""); }

Я что-то упускаю ?


person user3249448    schedule 11.12.2014    source источник
comment
Я получаю: Uncaught TypeError: chrome.runtime.connectNative не является функцией   -  person    schedule 10.02.2016


Ответы (1)


У меня такая же проблема. Убедитесь, что отправляемое вами сообщение соответствует формату JSON. В моем случае хост получил значение "some value" с двойными кавычками. Когда это объединялось для создания переменной msgdata, это создавало недопустимый JSON.

person adam0101    schedule 02.09.2015
comment
@ user34660, возможно, или он удалил свой комментарий после того, как я прокомментировал. В любом случае, сейчас это не имеет особого смысла. Я удалю свой комментарий. - person adam0101; 12.12.2018