我正在使用本机消息传递主机。我可以使用api
启动我的自定义应用程序var port = chrome.runtime.connectNative('com.my_company.my_application');
我可以使用api
将消息发布到我的自定义应用port.postMessage({ text: "Hello, my_application" });
我知道他们正在使用输入/输出流来发送和接收消息。 我的本机应用程序(c或c ++ exe)应如何获得有关收到的消息的通知 我应该处理哪个功能/事件来接收消息。
答案 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;
}