Собственный обмен сообщениями Chrome с использованием исполняемого файла Jar

Я создал расширение Chrome с разрешением nativeMessaging, добавленным в манифест.

Я открываю порт на собственный хост обмена сообщениями.

Манифест моего собственного узла обмена сообщениями указывает на исполняемый файл jar.

Когда я запускаю расширение, ошибок нет, с подключением все в порядке, но код в моем jar-файле никогда не запускается. (Для тестирования я показываю новый JFrame, созданный в методе main(). При двойном щелчке файла jar отображается JFrame. Но при запуске файла jar через Chrome Native Messaging JFrame не отображается.

Есть ли что-то, что мне не хватает?


person Anthony Tietjen    schedule 31.12.2013    source источник
comment
Вам когда-нибудь удавалось заставить это работать?   -  person HairOfTheDog    schedule 10.12.2014
comment
Никогда не добивался успеха с программой Java. В итоге я использовал другой язык.   -  person Anthony Tietjen    schedule 26.05.2015
comment
@HairOfTheDog Я успешно создал его. Я могу помочь, если вы все еще заинтересованы.   -  person omerfarukdogan    schedule 08.07.2015
comment
@farukdgn Не могли бы вы рассказать мне, как я могу запустить файл jar с файлом манифеста?   -  person HarshaXsoad    schedule 11.08.2015
comment
@HarshaXsoad Я добавил это как ответ.   -  person omerfarukdogan    schedule 14.08.2015


Ответы (3)


у вас есть заглавные буквы в вашем имени mainfest? у меня была эта проблема + те же симптомы, и это исправило это для меня (хотя теперь я получаю другую ошибку)

{ "name": "com.google.chrome.example.echoUppercase", ‹- не работает ....

"name": "com.google.chrome.example.echouppercase", ‹- работает }

person Oliver Renner    schedule 05.05.2015

Мне удалось заставить его работать, позволив хрому запустить bat-файл со следующим содержимым:

@echo off
java -jar your_file.jar %*

Отключение эха было деталью, на выяснение которой у меня ушло некоторое время.

person ChristopherS    schedule 09.09.2015
comment
BAT - файл не будет отправлять текст обратно в Google Chrome. это неправильно, и многие люди будут тратить время на это. пожалуйста, напишите, как запустить банку прямо из json. - person ; 17.02.2016
comment
Пример из chrome также представляет собой .bat, который запускает программу на Python. Работает просто отлично. - person roeland; 09.03.2018

Мне удалось сделать это с помощью оболочки исполняемого файла Java (я использовал Launch4j).

Это файл манифеста:

{
    "name": "com.your.application",
    "description": "Your description.",
    "path": "path\\to\\wrapped\\java\\host.exe",
    "type": "stdio",
    "allowed_origins": [
        "chrome-extension://idofyourchromeextension/"
    ]
}

Это родное хост-приложение, которое я обернул:

import javax.swing.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.URISyntaxException;

public class ChromeHandler
{
    static public void main(String[] args)
    {
        InputStream input = System.in;
        try
        {
            System.in.available();
        }
        catch (Exception e)
        {
            return;
        }
        char receivedChar;
        try{
            FileOutputStream output = new FileOutputStream("PathToTextFile");
            while((receivedChar = (char) input.read()) != -1)
            {
                output.write(receivedChar);
                //My messages only have the '}' character at the end.
                if(receivedChar == '}')
                {
                    return;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
person omerfarukdogan    schedule 14.08.2015
comment
Извини за поздний ответ дружище. спасибо, я потерялся, не работая с реализацией Java. постараюсь как можно скорее. - person HarshaXsoad; 14.09.2015
comment
И кстати что такое socket?. Это не определено. - person HarshaXsoad; 14.09.2015
comment
Я прокомментировал сокет и попробовал ваше решение, но оно все равно выдает мне ошибку при общении с ошибкой собственного узла обмена сообщениями. Удалось ли вам заставить его работать успешно. Не могли бы вы помочь мне с этим? - person HarshaXsoad; 14.09.2015
comment
@HarshaXsoad Да, это сработало успешно. Я забыл удалить socket часть, когда редактировал для вас. Убедитесь, что ваш файл манифеста и запись в реестре верны и непротиворечивы. Внимательно проверьте allowed_origins. - person omerfarukdogan; 15.09.2015
comment
Спасибо, приятель .... однако я выбрал С++ для своего проекта, так как это тоже не сработало для меня. Но наверняка это может быть какая-то другая причина, так как этот код работает для вас. Я обязательно попробую еще раз с этим позже, чтобы узнать, что не так. Спасибо за помощь. - person HarshaXsoad; 15.09.2015