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

jld*_*ont 5 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 位)
  • 没有跨扩展消息,只是应用到/从扩展
  • 扩展源代码,但请注意,由于此问题中提出的问题,我已经开始实施另一种扩展策略。

GLE*_*LES 2

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

由于您的扩展程序没有提供事件侦听器功能chrome.runtime.onConnectExternalchrome.runtime.connect因此无法为您的扩展程序工作。

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

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

chrome.runtime.onMessageExternal.addListener(
    function(request, _sender, sendResponse) {
        console.log(request);
        ...
    }
);
Run Code Online (Sandbox Code Playgroud)

图片-1