我已设法将我的扩展程序连接到我们的本机主机:
var pulse_tracker_port = chrome.runtime.connectNative('com.cloudfactory.pulsetracker');
但是如何确定连接是否成功?无论连接是否成功,'pulse_tracker_report.name'的值始终为空字符串。
我还尝试添加侦听器以查明连接是否成功但是没有调用这些回调:
chrome.runtime.onConnect.addListener(function(port)
{
console.log('Connected to "Pulse Tracker" @port: ' + port.name);
});
chrome.runtime.onConnectExternal.addListener(function(port)
{
console.log('Connected to "Pulse Tracker" @port: ' + port.name);
});
顺便说一下,这也不会被调用:
pulse_tracker_port.onConnect.addListener(function(port)
{
console.log('Connected to "Pulse Tracker" @port: ' + port.name);
});
这是我尝试这样做时的结果:
main.js:26 Uncaught TypeError: Cannot read property 'addListener' of undefined
onConnectExternal适用于扩展之间的跨扩展消息传递,但看起来它不适用于本机消息托管。任何帮助,将不胜感激。感谢
答案 0 :(得分:2)
chrome.runtime.onConnect
和chrome.runtime.onConnectExternal
在这里不相关,因为它们会通知您有关传入连接的信息,而不是关于传出连接的状态。
pulse_tracker_port
是Port
object,没有onConnect
属性。
您需要做的是立即将侦听器分配给端口对象的onDisconnect
事件。如果连接出现问题,将调用侦听器并设置chrome.runtime.lastError
:
var pulse_tracker_port = chrome.runtime.connectNative('com.cloudfactory.pulsetracker');
pulse_tracker_port.onDisconnect.addListener(function() {
if (chrome.runtime.lastError) {
console.error(chrome.runtime.lastError);
}
});
否则,只需尝试使用.postMessage()
和.onMessage
事件。对于postMessage
,如果端口断开连接,则会抛出错误。