Сценарий содержимого не получает сообщение, когда открыто несколько вкладок - PullRequest
0 голосов
/ 24 марта 2020

Я работаю над расширением chrome. Я добавил кнопки на одной странице сайта. При нажатии они создают вкладку и открывают другую страницу сайта. На недавно созданной странице я внедряю какой-то скрипт.

chrome.tabs.executeScript(
  newTab.id,
  {
    file: 'script-to-be-injected.js',
  },
)

Этот скрипт выполняет некоторые действия на вновь созданной странице, и эти действия перенаправляют на другую страницу. Теперь, когда эта перенаправленная страница загружена. Поскольку мой ранее внедренный скрипт был удален, я отправляю сообщение из скрипта контента на эту страницу, используя указанный порт c, и эта страница также внедряет скрипт на эту страницу. Теперь этот недавно внедренный скрипт получает некоторую информацию с этой страницы, закрывает перенаправленную страницу и отправляет сообщение на мою первую страницу (страницу, где я открыл другие страницы). Проблема, с которой я сейчас сталкиваюсь, заключается в том, что сообщение не было получено на первой странице. Если я не закрываю перенаправленную страницу, я вижу сообщение о том, что консоль отправляется на перенаправленной странице, а также прослушивание сообщений на этом порту. Вот код фонового сценария последней части

port.onMessage.addListener(({ message }, sender) => {
  if(message === 'GET_DETAIL_FROM_REDIRECTION_PAGE') {
    chrome.tabs.query({ url: REDIRECTED_PAGE_URL }, ([tab]) => {
      chrome.tabs.executeScript(
        tab.id,
        {
          file: 'some-script.js',
        },
        () => {
          chrome.tabs.remove(tab.id, () => {
            console.log('sending message to port');
            port.postMessage({ message: 'GOT_INFO' });
          });
        }
      )
    });
  }

  return true;
});

Содержимое сценария

const port = chrome.runtime.connect(null, { name: PORT_NAME });

if (port.name) {
  if (window.location.href === REDIRECTION_PAGE) {
    port.postMessage({ message: 'GET_INFO' });
  } else if (window.origin === TARGET_SITE) {
    port.onMessage.addListener(({ message }) => {
      console.log({ message });
      if (message === 'GOT_INFO') {
      // perform other actions
      }
    });
  }
}

Пожалуйста, дайте мне знать, если требуется какая-либо другая часть кода. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...