Я знаю, что есть похожие вопросы, но мне еще не удалось найти вопрос, который решает мою проблему.
В основном я пытаюсь отправить сообщение из моего скрипта background.js в мой скрипт content.js следующим образом
background.js
chrome.runtime.onInstalled.addListener(() => {
// Listen for when a user is on correct site and enable the extension
chrome.webNavigation.onCompleted.addListener(() => {
chrome.tabs.query({ active: true, currentWindow: true }, ([{ id }]) => {
chrome.pageAction.show(id);
});
}, { url: [{ urlMatches: 'website.com' }] });
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
checkUrl(tab);
});
chrome.tabs.onActivated.addListener(() => {
checkUrl();
});
chrome.tabs.onCreated.addListener((tab) => {
checkUrl(tab);
});
});
// Check to see if current url is either website or website1
const checkUrl = (tab = null) => {
if (!tab) {
chrome.tabs.query({ active: true, lastFocusedWindow: true }, (tabs) => {
tab = tabs[0];
if (tab.url.includes('website')) {
getInfo(tab);
} else if (tab.url.includes('website2')) {
getOtherInfo();
}
});
} else if (tab) {
if (tab.url.includes('website')) {
getInfo(tab);
} else if (tab.url.includes('website2')) {
getOtherInfo();
}
}
}
const getInfo = (tab) => {
chrome.tabs.sendMessage(tab.id, { text: 'report_back' }, (result) => {
console.log('report_back', result);
});
}
const getOtherInfo = () => {
}
content.js
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
console.log(msg);
if (msg.text === 'report_back') {
setTimeout(() => {
sendResponse(document);
}, 10000);
}
});
, но каждый раз, когда я перехожу на нужные страницыЯ получаю следующие ошибки в консоли background.js
Unchecked runtime.lastError: Не удалось установить соединение. Получающий конец не существует.
и мой console.log - tabs undefined
Я не уверен, что я делаю неправильно?
РЕДАКТИРОВАТЬ
Сейчас я делаю это точно так же, как указано в официальных документах обмена сообщениями
background.js
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
console.log(response.farewell);
});
});
content.js
chrome.runtime.onMessage.addListener(
function (request, sender, sendResponse) {
console.log(sender.tab ?
"from a content script:" + sender.tab.url :
"from the extension");
if (request.greeting == "hello") {
sendResponse({ farewell: "goodbye" });
}
return true;
});
и он не работает .. что я делаю не так?
Я даже пытался обернуть sendResponseв setTimeout()
, но без изменений
if (request.greeting == "hello") {
setTimeout(() => {
sendResponse({ farewell: "goodbye" });
}, 10000);
return true;
}
РЕДАКТИРОВАТЬ 2
Я попытался повторно запустить функцию, если есть ошибка
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, { greeting: "hello" }, function (response) {
if (chrome.runtime.lastError) {
console.log('error');
setTimeout(getInfo, 1000);
} else {
console.log(response.farewell);
}
});
});
и я получаю ошибку несколько раз
любая помощь будет оценена !! Спасибо