因此,我创建了一个端口
var port = chrome.runtime.connectNative("my.native.app");
我会定义
port.onMessage.addListener(onNativeMessage);
port.onDisconnect.addListener(onDisconnect);
所以当我打电话
port.postMessage({"text":"messsage"});
它使用标准输入/输出进入我的本机应用程序,我得到了响应。
这是我的问题:我有几个期望得到响应的函数,而另一些则没有。我希望能够发布一条消息并等待来自本机应用程序(正在持续运行)的响应。怎么做?
我知道通过“一次消息传递”sendMessageNative
可以很好地工作,除了我将本机应用程序用作状态机外,因此它会在完成后杀死我的应用程序,这不好。
您可以添加另一个侦听器onNativeMessage
来调用您的回调,然后注销。
像这样的东西,带有闭包:
function callbackOnId(ev, id, callback) {
var listener = ( function(port, id) {
var handler = function(msg) {
if(msg.id == id) {
ev.removeListener(handler);
callback(msg);
}
}
return handler;
})(ev, id, callback);
ev.addListener(listener);
}
/* ... */
callbackOnId(port.onMessage, "someRequestId", callback);
port.postMessage({"text":"message", "id": "someRequestId"});
现在,第一次你的端口接收到包含消息"id": "someRequestId"
,callback
将与该消息,在此之后,听众将注销本身被调用。
如果需要,可以添加删除侦听器和/或修改消息检查的功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句