java - Chrome 应用程序 : Launch a external application (shell script or jar) using native messaging hosts

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

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

由于 NPAPI 库已被弃用,我一直在寻找替代方案,并决定使用“Native messaging hosts”来启动外部应用程序。

为了创建我的第一个示例,我尝试启动一个 shell 脚本,因为我认为这更容易。但是我还没有设法启动脚本。我在 linux 上开发

list 文件在这个路径

"/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/ 

我使用的是稳定的 google chrome 版本 (34.0.1847.132)

有没有错?

最佳答案

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

关于java - Chrome 应用程序 : Launch a external application (shell script or jar) using native messaging hosts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23535788/

相关文章:

java - Android 图片库和 fragment 问题

python - 无法在服务器上使用 Chrome 驱动程序运行 selenium 应用程序

python - `conda activate` 如何改变*当前* bash 环境?

java - 解决 JNI DefineClass 中的依赖关系

java - 如何将两个列表项结果显示为一个,以获得多个结果。在 selenium Webdriver 中使用 java

java - 图像/纹理滚动/移位(换行)

linux - 如何让 sed 从标准输入中读取?

linux - 我们可以从 Cloudformation 中的 EC2 实例元数据中删除实例用户数据吗

bash - 在 bash 命令行上,如何删除光标前的所有字母?

linux - bash 中的大小写星号(一个实际的星号)?