我试图在应用程序(而不是内容脚本)中获取端口的状态.当我做 :
this.port = chrome.runtime.connect(“okcbadfdlhldjgkbafhnkcpofabckgde”);
我得到一个有效的端口对象,但无论如何我都找不到确定端口是否可以使用(如果无法访问扩展,我甚至都没有得到断开事件).
我想出具有连接状态的唯一方法是在执行this.port.postMessage时实际捕获异常.
有没有更好的办法 ?
https://developer.chrome.com/extensions/runtime#method-connect
更新
>在Linux Ubuntu上运行版本48.0.2564.97(64位)
>没有跨扩展消息传递,只是应用程序进出扩展
>扩展source code,但请注意,由于此问题中提出的问题,我已经开始实施扩展的另一个策略.
最佳答案 您的扩展使用后台脚本,该脚本为chrome.runtime.onMessageExternal事件提供侦听器功能.此事件用于侦听传入消息,通过调用chrome.runtime.sendMessage方法从外部网页脚本(或其他扩展)发送.
由于您的扩展程序不为chrome.runtime.onConnectExternal事件提供侦听器功能,因此chrome.runtime.connect无法用于您的扩展程序.
就知道连接状态而言,在这种情况下,一个简单的try-catch块就足以知道扩展是否支持端口.如果是,则需要查看与此扩展名对应的清单 – 以查看是否允许特定主机发送消息.
我可以通过在后台脚本中添加以下代码行来向您的扩展发送消息(参见附图).除此之外,我还在清单中添加了主机的匹配字符串 – www.example.org.
chrome.runtime.onMessageExternal.addListener(
function(request, _sender, sendResponse) {
console.log(request);
...
}
);