Можно ли использовать передачу сообщений, чтобы определить, включено ли другое расширение? - PullRequest
0 голосов
/ 03 февраля 2020

Я хотел бы проверить, включено ли другое расширение. Я понимаю, что API управления можно использовать для проверки, включено ли другое расширение ( Определить, установлено ли другое расширение Chrome ). Однако я пытаюсь запросить минимальное разрешение и поэтому хотел бы спросить, могу ли я использовать передачу сообщений.

Расширение 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.

1 Ответ

0 голосов
/ 04 февраля 2020

Проверка на chrome.runtime.lastError должна быть добавлена ​​в прослушиватель onDisconnect.

extPort.onDisconnect.addListener(function(object) {
    if (chrome.runtime.lastError) {
        extPort.disconnect();
    }
}); 
...