如何在本机应用程序中处理chrome.runtime.sendNativeMessage()

时间:2013-11-27 08:49:20

标签: google-chrome-extension

我正在使用本机消息传递主机。我可以使用api

启动我的自定义应用程序
var port = chrome.runtime.connectNative('com.my_company.my_application');

我可以使用api

将消息发布到我的自定义应用
port.postMessage({ text: "Hello, my_application" });

我知道他们正在使用输入/输出流来发送和接收消息。 我的本机应用程序(c或c ++ exe)应如何获得有关收到的消息的通知 我应该处理哪个功能/事件来接收消息。

2 个答案:

答案 0 :(得分:3)

<强>更新

关于如何在本机应用上收听消息,它们会被发送到stdio(暂时这是Chrome扩展和本机应用之间唯一可用的通信渠道)。 请查看以 sample app 为主题的 implemented in python


您在端口的 onMessage event 上侦听注册侦听器的消息。

仅在您需要一次性通信(不是持久端口)时才使用 sendNativeMessag() 。在这种情况下,请勿使用chrome.runtime.connectNative(...)。相反,做这样的事情:

var msg = {...};
chrome.runtime.sendNativeMessage("<your_host_id>", msg, function(response) {
    if (chrome.runtime.lastError) {
        console.log("ERROR: " + chrome.runtime.lastError.message);
    } else {
        console.log("Messaging host sais: ", response);
    }
});

关于 Native Messaging 的文档部分非常详细,是一个很好的信息来源。

答案 1 :(得分:3)

我发布的c ++代码将进行通信,即接收并将消息发送到chrome扩展。 希望这对其他开发者有帮助

int _tmain(int argc, _TCHAR* argv[])
{
    cout.setf( std::ios_base::unitbuf ); //instead of "<< eof" and "flushall"
    _setmode(_fileno(stdin),_O_BINARY);


    unsigned int c, i, t=0;
    string inp;  
    bool bCommunicationEnds = false;

    bool rtnVal = true;
    do {

        inp="";
        t=0;
        //Reading message length 
        cin.read(reinterpret_cast<char*>(&t) ,4);

        // Loop getchar to pull in the message until we reach the total
        //  length provided.
        for (i=0; i < t; i++) {
            c = getchar();
            if(c == EOF)
            {
                bCommunicationEnds = true;
                i = t;
            }
            else
            {
                inp += c;
            }
        }

         if(!bCommunicationEnds)
        {
            //Writing Message length
            cout.write(reinterpret_cast<char*>(&inp),4); 
            //Write original message.
            cout<<inp;
        }
    }while(!bCommunicationEnds);
    return 0;
}