Контентный скрипт не получает ответ на сообщение от фонового.(Chrome extension)
У меня есть такой код в контентном скрипте:
const getFullImg = async () => {
const element = imagesWidgetDocument.querySelector(".rc-imageselect-challenge");
const rect = element.getBoundingClientRect();
try {
const response = await sendMessageToBackground({ action: "takeScreenshot" });
if (response) {
const img = new Image();
img.src = response;
await new Promise((resolve) => {
img.onload = resolve;
});
const canvas = document.createElement("canvas");
canvas.width = 500;
canvas.height = 500;
const x = rect.left + window.scrollX;
const y = rect.top + window.scrollY;
const ctx = canvas.getContext("2d");
ctx.drawImage(img, x + 110, y + 130, 500, 500, 0, 0, 500, 500);
const dataURL = canvas.toDataURL("image/png");
return dataURL;
}
} catch (error) {
console.error(error);
}
};
const sendMessageToBackground = (message) => {
return new Promise((resolve, reject) => {
chrome.runtime.sendMessage(message, (response) => {
if (chrome.runtime.lastError) {
reject(chrome.runtime.lastError);
} else {
resolve(response);
}
});
});
};
И такой код в фоновом скрипте:
//TakeScreenshot
chrome.runtime.onMessage.addListener(function(request, sender, callback) {
if (request.action === "takeScreenshot") {
setTimeout(() => {
chrome.tabs.captureVisibleTab({ format: "png", quality: 100 }, function(screenshotUrl) {
if (screenshotUrl) {
console.log(screenshotUrl)
callback(screenshotUrl);
} else {
callback(null);
}
});
return true; // Сообщение для chrome, что запрос асинхронный
}, 1000)
}
});
Но я получаю ошибки:The message port closed before a response was received. - На вкладке которая сейчас является активной
И ошибку Unchecked runtime.lastError: Cannot access contents of url "devtools://devtools/". Extension manifest must request permission to access this host. Причем эта ошибка, как мне кажется мешает получить ответ, потому что мой фоновый скрипт правильно делает скриншот и получает ссылку на него, но контентный скрипт не может получить его, хотя присутствует sendResponse.
Я не нашел нигде в интернете подобной проблемы и не знаю как ее пофиксить. Я пытался добавить в мой манифест файл разрешение на доступ к devtools, но это не помогло Вот мой manifest:
{
"name": "CaptchaSolver",
"description": "solves captchas from websites",
"version": "1.1",
"manifest_version": 3,
"icons": {
"48": "images/48.png"
},
"host_permissions": [
"<all_urls>"
],
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["./js/index.js"]
}
],
"action": {
"default_popup": "popup.html"
},
"permissions": ["scripting", "activeTab", "storage", "tabs"],
"background": {
"service_worker": "./js/background.js"
}
}