Chrome-приложение: запуск внешнего приложения (сценария оболочки или jar-файла) с использованием собственных узлов обмена сообщениями

1

Я разрабатываю приложение google-chrome, и мне нужно запустить приложение Java. (Действительно, мне нужно читать и сохранять файлы без всплывающего окна selectfile).

Поскольку библиотека NPAPI устарела, я искал альтернативы, и я решил использовать " Native messaging hosts " для запуска внешнего приложения.

Чтобы создать свой первый пример, я попытался запустить сценарий оболочки, потому что я считаю, что это проще. Однако мне не удалось запустить скрипт. Я развиваюсь в Linux

Файл манифеста находится на этом пути

"/etc/opt/chrome/native-messaing-hosts/com.centeropenmiddleware.l3p1.xmleditor.json":

и содержание:

{
  "name": "com.centeropenmiddleware.l3p1.xmleditor",
  "description": "Saving a file",
  "path": "/home/paco2/pp.sh",
  "type": "stdio",
  "allowed_origins": [
    "chrome-extension://plfnjepfbddljeogeacemcpceiofapnm/"
  ]
}

Идентификатор приложения - plfnjepfbddljeogeacemcpceiofapnm

скрипт создает файл:

#!/bin/bash
echo hola mundo >> aaa

Код приложения не работает в этой строке:

try {
    var port = chrome.runtime.connectNative ('com.centeropenmiddleware.l3p1.xmleditor')
} catch (e) {
    console.log(e);
    return;
}

Ошибка поймана

{
    message : "Error connecting to native app: com.centeropenmiddleware.l3p1.xmleditor",
    stack : "Error: Error connecting to native app: com.centeropenmiddleware.l3p1.xmleditor
             at Object.<anonymous> (extensions::runtime:189:11)
             at Function.target.(anonymous function) (extensions::SafeBuiltins:19:14)
             at Object.handleRequest (extensions::binding:55:27)
             at Function.target.(anonymous function) (extensions::SafeBuiltins:19:14)
             at Object.<anonymous> (extensions::binding:318:32)
             at saveas (chrome-extension://plfnjepfbddljeogeacemcpceiofapnm/js/editorRoutines.js:104:35)
             at HTMLButtonElement.sendFileContentFromEditor (chrome-extension://plfnjepfbddljeogeacemcpceiofapnm/js/editorRoutines.js:89:27)"
}

Для запуска приложения я использовал эти команды

google-chrome --load-and-launch-app=/home/paco2/Projects/UPM/XMLEditor/XMLEditor/ --native-messaging-hosts="com.centeropenmiddleware.l3p1.xmleditor.json=/etc/opt/chrome/native-messaing-hosts/com.centeropenmiddleware.l3p1.xmleditor.json"
google-chrome --load-and-launch-app=/home/paco2/Projects/UPM/XMLEditor/XMLEditor/ 

Я использую старую версию chrome google (34.0.1847.132)

Есть ли какие-то ошибки?

Теги:
google-chrome-app
chrome-native-messaging

1 ответ

2

Bash - это плохой выбор для обработки API-интерфейсов Chromiums Native Messaging.

Он не может обрабатывать двоичную информацию любым эффективным способом, см. Этот вопрос

Однако мне удалось запустить скрипт bash. Для этого я использовал sendNativeMessage. Отправка только один раз

 chrome.runtime.sendNativeMessage('com.centeropenmiddleware.l3p1.xmleditor',
        {text: "send"},
        function(response) {console.log("Received " + 
                            chrome.runtime.lastError.message);
        });

Он запустит /home/paco2/pp.sh, но разбор сообщения будет затруднен в bash, даже если он короткий, как send.

Короче говоря , не используйте bash для этого, попробуйте C++ или Python между ними и используйте subprocess.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню