可以使用消息传递来检测是否启用了另一个扩展吗?

问题描述 投票:0回答:1

我想检查是否启用了另一个扩展。我了解Management 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.
javascript google-chrome-extension message-passing
1个回答
0
投票

应在onDisconnect侦听器中添加对chrome.runtime.lastError的检查。

extPort.onDisconnect.addListener(function(object) {
    if (chrome.runtime.lastError) {
        extPort.disconnect();
    }
}); 
© www.soinside.com 2019 - 2024. All rights reserved.