У моего расширения Chrome есть следующие два javascript:
background.js
, работает как фоновый скрипт:
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
if (message.data == "takeScreenshot") {
var resp = sendResponse;
chrome.tabs.captureVisibleTab(function(screenshotUrl) {
resp({
screenshot: screenshotUrl
});
});
return true; // Return true to tell that the response is sent asynchronously
} else {
return "TestReply";
}
});
api.js
, работает как веб-ресурс:
window.takeScreenshot = (function() {
var isTakingScreenshot = false; // Semaphore
return function() {
if(isTakingScreenshot) return Promise.reject();
isTakingScreenshot = true;
return new Promise(function(resolve, reject) {
chrome.runtime.sendMessage("eomfljlchjpefnempfimgminjnegpjod", "takeScreenshot", function(response) {
console.log(response);
isTakingScreenshot = false;
resolve(response.screenshot);
});
});
}
})()
window.test = (function() {
return function() {
return new Promise(function(resolve, reject) {
chrome.runtime.sendMessage("eomfljlchjpefnempfimgminjnegpjod", "test", function(response) {
console.log(response);
resolve(response.length);
});
});
}
})();
Когда я выполняю в консоли вкладки любую функцию (автозаполнение знает их, поэтому они доступны), я получаю сообщение об ошибке:
Не проверено runtime.lastError: Не удалось установить соединение. Получающий конец не существует.
и возвращенный респон не определен.
Я проверил, что идентификатор в sendMessage
такой же, как в манифесте и на странице расширений chrome: //, и я открыл фоновую страницу DevTools расширения и вручную добавил туда того же слушателя, чтобы сделать уверен, что слушатель действительно зарегистрирован.
Мои поиски обнаружили, что эта ошибка означает, что слушатель не был правильно зарегистрирован, но я не могу найти причину. У вас есть идея, что вызывает эту ошибку?