【发布时间】:2020-02-03 03:01:36
【问题描述】:
我想检查是否启用了另一个扩展程序。我了解管理 API 可用于检查是否启用了另一个扩展 (Detect if another Chrome Extension is installed)。但是,我尝试请求最低权限,因此我想问一下我是否可以使用消息传递。
扩展 A
let extPort = chrome.runtime.connect(ExtB);
extPort.postMessage({from: "ExtA", fn: "greeting"});
extPort.onMessage.addListener(function(message, sender) {
if ((message.from == "ExtB") && (message.fn == "greeting")) {
console.log("Ext B is enabled");
}
});
扩展 B
chrome.runtime.onConnectExternal.addListener(function(port) {
port.onMessage.addListener(function(message, sender) {
if ((message.from == "ExtA") && (message.fn == "greeting")) {
port.postMessage({from: "ExtB", fn: "greeting"});
}
});
});
如果启用了扩展 B,此方法可以正常工作,但如果未启用扩展 B,则会显示错误消息。有什么方法可以处理这个错误信息?
Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.
【问题讨论】:
-
错误消息包含一个明显的提示如何解决它:只需在您的
onMessage侦听器中检查runtime.lastError(将其添加到您的if语句中就足够了) -
对不起。你能给我更多的提示吗?
let extPort = chrome.runtime.connect(ExtB);出现错误消息,chrome.runtime.connect没有回调函数 -
我写的是:onMessage 监听器,而不是
connect的。上面的代码真的是你自己写的吗? -
首先感谢您的帮助 =) 我是 Chrome 扩展程序的新手。在您鼓励我检查 chrome API 规范后,这个问题得到了解决。正如我所提到的,
let extPort = chrome.runtime.connect(ExtB);会发生此错误,并且因为没有 runtime.onConnect 事件侦听器(未启用 ext B)。在 onMessage 侦听器中添加检查并不能解决问题,因为端口/连接设置不正确。应在 onDisconnect 侦听器中添加检查。
标签: javascript google-chrome-extension message-passing