sendMessage не возвращает результат при переходе с манифеста V2 на V3

Мое расширение основано на манифесте V2 и совместимо с разными браузерами на основе браузерного полифила. Мне нужно перейти на манифест V3. Существует множество коммуникаций между контекстом и фоном с использованием sendMessage в расширении. Как написано во многих местах, включая официальную документацию Chrome, в V3 sendMessage изначально возвращает обещания, поэтому я удалил полифил и попытался загрузить расширение, но оно не сработало.

Похоже, что sendMessage do возвращает обещание, но при входе в консоль сообщение от .then появляется перед сообщением от прослушивателя сообщений в сервисном работнике (бывший фон), поэтому результат всегда не определен . Что я делаю не так?

контекст.js:

      if (typeof globalThis.browser === "undefined")
    environment = chrome.runtime
else
    environment = browser.runtime

onCompletePageLoad()

function onCompletePageLoad() {
    let nmarr = [{request: "AA"}];
    let snd = environment.sendMessage(nmarr);
    console.log("SENDER = ", snd);
    snd.then(
        result => {console.log("AFTER MESSAGE RETURN = ", result) },
        error => {}
        );
}

фон.js:

      let environment
if (typeof globalThis.browser === "undefined")
    environment = chrome.runtime
else
    environment = browser.runtime

environment.onMessage.addListener(onContentMessage);

function onContentMessage(msg, sender, handleResponse)
{
    console.log("MESSAGE RECEIVED");
    return new Promise(resolve => {
        
        setTimeout(() => {
            console.log("TIMES OUT");
            resolve("async response from background script");
        }, 2000);
    });
}

Результат:

ОТПРАВИТЕЛЬ = Обещание {<ожидание>}
ПОСЛЕ ВОЗВРАТА СООБЩЕНИЯ = не определено

(В исходных журналах расширений из background.js появляется на той же консоли, что и из context.js, но после того, как я извлек этот фрагмент для проверки расширения, фоновые сообщения появляются только на консоли сервис-воркера, поэтому я не могу продемонстрировать порядок консоли Сообщения)

манифест.json:

      {
  "manifest_version": 3,
  "name": "messagetest manifest 3",
  "version": "1.0",

  "description": "Testing content to background message sending",

  "background": {
    "service_worker": "background.js"
  },

  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["content.js"]
    }
  ]
}

0 ответов

Другие вопросы по тегам