Не удалось установить соединение. Принимающий конец не существует в расширении Chrome, выполненном в угловой

#angular #google-chrome-extension

Вопрос:

У меня есть определенный компонент, в котором, если пользователь нажимает кнопку, он выполняет то, что должно выполняться, даже если всплывающее окно закрыто, причина, по которой я хотел подойти к этой проблеме с помощью фонового сценария, однако я не могу отправить сообщение этому сценарию, потому что я продолжаю получать эту ошибку Could not establish connection. Receiving end does not exist .

приложение.компонент.ts

   activate(): void {
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
      chrome.tabs.sendMessage(tabs[0].id, {msg: 'active'}, function(response) {
        console.log(response.msg);
      });
    });
  }
 

предыстория.ts

 chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse){
    console.log(request.msg);
    // do something and when it's done send a response
    sendResponse({msg: 'inactive'});
  }
);
 

манифест.json

 {
  "manifest_version": 2,
  "name": "foo",
  "permissions": [
    "background",
    "activeTab",
    "storage",
    "webNavigation",
  ],
  "background": {
    "scripts": [
      "background.js",
      "runtime.js"
    ],
    "persistent": false
  },
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "index.html"
  }
}

 

Примечание: Я также попытался отправить сообщение таким образом в компоненте

 chrome.runtime.sendMessage({
    msg: 'active'
}, function(response){
    // do something
});
 

Я также попытался вернуть значение true в функции прослушивателя

Но я получаю ту же ошибку.

Как я мог это исправить?

Комментарии:

1. @wOxxOm после перезагрузки вкладки я получаю эту ошибку The message port closed before a response was received.

2. Подождите, ваш первый код отправляет сообщение в сценарий содержимого, но вы не используете никакой, поэтому chrome.runtime.SendMessage-правильный подход. Я предполагаю, что вы видите старую ошибку на странице chrome://расширения, и в этом случае нажмите clear кнопку. В любом случае, откройте devtools для фонового сценария и еще один для всплывающего окна, установите точки останова и посмотрите, что произойдет.

3. да, это было так, странно