Chrome扩展程序,消息传递:获取端口状态

时间:2016-01-30 20:47:29

标签: google-chrome google-chrome-extension

我试图在应用程序(而不是内容脚本)中获取端口的状态。当我这样做时:

this.port = chrome.runtime.connect("okcbadfdlhldjgkbafhnkcpofabckgde");

我得到一个有效的port对象,但无论如何我都找不到确定端口是否可以使用(如果扩展名不能,我甚至不会收到disconnect个事件到达)。

我认为具有连接状态的唯一方法是在执行this.port.postMessage时实际捕获异常。

有更好的方法吗?

https://developer.chrome.com/extensions/runtime#method-connect

更新

  • 在Linux Ubuntu上运行版本48.0.2564.97(64位)
  • 没有交叉扩展消息传递,只有应用程序进出扩展程序
  • 扩展source code但请注意,由于此问题中提出的问题,我已经开始实施其他扩展策略。

1 个答案:

答案 0 :(得分:2)

您的扩展程序使用background-scriptchrome.runtime.onMessageExternal事件提供侦听器功能。此事件用于侦听传入的消息,通过调用chrome.runtime.sendMessage方法从外部网页脚本(或其他扩展)发送。

由于您的扩展程序未为chrome.runtime.onConnectExternal事件提供侦听器功能,因此chrome.runtime.connect无法用于您的扩展程序。

就知道连接状态而言,在这种情况下,一个简单的try-catch块就足以知道扩展是否支持port。如果是,则需要查看与此扩展名对应的manifest - 以查看是否允许特定主机发送消息。

我可以通过在后台脚本中添加以下代码行来向您的扩展程序发送消息(请参阅附图)。除此之外,我还在清单中为主机matches添加了www.example.org字符串。

chrome.runtime.onMessageExternal.addListener(
    function(request, _sender, sendResponse) {
        console.log(request);
        ...
    }
);

image-1