Я работаю над расширением 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
}
});
}
}
Пожалуйста, дайте мне знать, если требуется какая-либо другая часть кода. Спасибо!