我试图在应用程序(而不是内容脚本)中获取端口的状态。当我这样做时:
this.port = chrome.runtime.connect("okcbadfdlhldjgkbafhnkcpofabckgde");
我得到一个有效的port
对象,但无论如何我都找不到确定端口是否可以使用(如果扩展名不能,我甚至不会收到disconnect
个事件到达)。
我认为具有连接状态的唯一方法是在执行this.port.postMessage
时实际捕获异常。
有更好的方法吗?
https://developer.chrome.com/extensions/runtime#method-connect
更新
答案 0 :(得分:2)
您的扩展程序使用background-script
为chrome.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);
...
}
);