Chrome-приложение: запуск внешнего приложения (сценария оболочки или jar-файла) с использованием собственных узлов обмена сообщениями
Я разрабатываю приложение Google-Chrome, и мне нужно запустить приложение Java. (Действительно, мне нужно читать и сохранять файлы без всплывающего окна выбора файла).
Поскольку библиотека NPAPI устарела, я искал альтернативы и решил использовать "собственные хосты обмена сообщениями" для запуска внешнего приложения.
Чтобы создать мой первый пример, я попытался запустить скрипт оболочки, потому что я думаю, что это проще. Однако мне не удалось запустить скрипт. Я занимаюсь разработкой в 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/
Я использую стабильную версию Google Chrome (34.0.1847.132)
Есть ли что-то не так?
1 ответ
Bash - плохой выбор для работы с Chromiums Native Messaging API.
Это не может обработать двоичную информацию любым эффективным способом, см. Этот вопрос
Мне все-таки удалось запустить скрипт 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
,