使用可执行Jar文件的Chrome Native Messaging

时间:2013-12-31 17:47:42

标签: java chrome-native-messaging

我创建了一个Chrome扩展程序,其中nativeMessaging权限已添加到清单中。

我正在打开本地消息传递主机的端口。

我的本​​机消息传递主机的清单指向可执行jar文件。

当我启动扩展程序时,没有错误,连接似乎很好,但我的jar文件中的代码似乎永远不会运行。 (为了测试,我展示了一个在main()方法中创建的新JFrame。当双击jar文件时,它会显示JFrame。但是当通过Chrome Native Messaging运行jar文件时,JFrame不会显示。 / p>

我有什么遗失的吗?

3 个答案:

答案 0 :(得分:1)

你的主要名字中有大写字母吗? 我有这个问题+相同的症状,这解决了我 (虽然我现在得到一个不同的错误)

{   “name”:“com.google.chrome.example.echoUppercase”,< - 不会工作   ....

“name”:“com.google.chrome.example.echouppercase”,< - 有效 }

答案 1 :(得分:1)

我已经设法使用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();
        }
    }
}

答案 2 :(得分:1)

我设法通过让Chrome启动包含以下内容的bat文件来实现它:

@echo off
java -jar your_file.jar %*

回声是一个细节,花了我一些时间来弄清楚。