не работает chrome.runtime.sendMessage в расширении для chrome

у меня вопрос такой - не передаются данные из фонового скрипта background.js в скрипт исполняющийся на странице браузера widjet.js.

вот такой манифест:

{
    "permissions": ["storage","scripting","activeTab","tabs","unlimitedStorage","webRequest","scripting"],
    "background": {
        "service_worker": "background.js"
    },
    "content_scripts": [{
        "run_at": "document_idle",
        "matches": ["<all_urls>"],
        "js": ["main.js","widjet.js"],
        "css": ["css.css"]
    }],
    "manifest_version": 3,
    "name": "test",
    "description": "test",
    "version": "1.0.0",
    "homepage_url": "https://example.com",
    "icons": {
        "16": "icons/icon16.png",
        "48": "icons/icon48.png",
        "128": "icons/icon128.png"
    },
    "action": {
        "default_popup": "index.html",
        "default_icon": {
          "16": "icons/icon16.png",
          "48": "icons/icon48.png",
          "128": "icons/icon128.png"
        }
    }
}

в background.js у меня стоит слушатель вот такой

chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {

        sendResponse('Я работаю!');

});

а запрос в него направляется из widjet.js так:

chrome.runtime.sendMessage('getToken',(response) => { 
    if (chrome.runtime.lastError) {
    console.error(chrome.runtime.lastError);
    } else {
    console.log(response);
    }
});

но по какой то причине в консоли просто если выводить response выводит undefined, а если как я подправил lastError, то будет "message: 'The message port closed before a response was received.'"

я подобное делал в firefox расширении, и там оно работало примерно так же, сделав поправку на хром этот код почему то не хочет корректно передавать данные, скажите пожалуйста что я упустил? есть какая то ещё особенность? по тому что в документации к апи хрома оно показано что нужно так делать, но почему то не работает


Ответы (0 шт):