Chrome应用程序:使用本机消息传递主机启动外部应用程序(shell脚本或jar)

时间:2014-05-08 07:49:01

标签: java linux bash google-chrome-app chrome-native-messaging

我正在开发一个google-chrome应用程序,我需要启动一个Java应用程序。 (实际上,我需要在没有selectfile弹出的情况下读取和保存文件。)

由于NPAPI库已被弃用,我已经寻找替代方案,我决定使用" Native messaging hosts"启动外部应用程序。

要创建我的第一个示例,我尝试启动shell脚本,因为我认为这更容易。但是我还没有设法启动脚本。我在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/"
  ]
}

应用程序ID是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/ 

我使用stablish google chrome版本(34.0.1847.132)

有什么不对吗?

1 个答案:

答案 0 :(得分:2)

Bash是处理Chromiums Native Messaging API的不错选择。

它无法以任何有效的方式处理二进制信息,请参阅this question

我确实设法启动了一个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