如何确定connectNative是否失败或成功

时间:2017-04-10 10:45:31

标签: javascript google-chrome-extension google-chrome-devtools chrome-native-messaging

我已设法将我的扩展程序连接到我们的本机主机:

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适用于扩展之间的跨扩展消息传递,但看起来它不适用于本机消息托管。任何帮助,将不胜感激。感谢

1 个答案:

答案 0 :(得分:2)

chrome.runtime.onConnectchrome.runtime.onConnectExternal在这里不相关,因为它们会通知您有关传入连接的信息,而不是关于传出连接的状态。

pulse_tracker_portPort 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,如果端口断开连接,则会抛出错误。