Мое расширение (https://chrome.google.com/webstore/detail/asana2go/meaajmlecpkbjcofehfpjngpnpfpjlkd/related?hl=en-US) работает нормально ... пока я не выйду и не перезапущу Chrome.
После перезапуска Chrome эта строка в скрипте содержимого моего расширения:
chrome.runtime.sendMessage({msg: copyOrPrint, tasksOrSubtasks: tasksOrSubtasks, currentProjectIdOrSearch: currentProjectIdOrSearch, currentProjectName: currentProjectName, tasks: tasks});
выполняется, я полагаю, потому что предыдущая строка - console.log (), и я вижу ее вывод в консоли.
Но потому что в моем фоновом скрипте у меня есть это:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log('background listener function');
...
и я не не вижу «фоновой функции прослушивателя» в консоли, я заключаю, что либо sendMessage не проходит, либо прослушиватель onMessage не вызывается.
Можете ли вы вспомнить места, где я мог бы отладить это? Я использую devtools страницы, Inspect Popup devtools и окна devtools страницы фонового скрипта, и я сузился до этого, но теперь я в тупике.
Опять же, после перезапуска Chrome и увидев эту ошибку при отправке или получении, я могу исправить ситуацию, просто переустановив расширение, и все работает нормально, и я знаю, что сообщение отправляется и принимается и продолжает работать нормально - пока я не завершу перезапустите Chrome снова. (Такое же поведение возникает, если я запускаю локально с Load Unpacked или опубликовано.)
Поскольку переустановка расширения устраняет проблему, возможно, мой прослушиватель chrome.runtime.onInstalled уместен? Вот его начало (которое заканчивается фрагментом из моего фонового скрипта, уже включенного выше):
'use strict';
chrome.runtime.onInstalled.addListener(function() {
let md;
let outputTabId = null;
let messageObj = null;
let cssRules = null;
let requestMsg = null;
chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
chrome.declarativeContent.onPageChanged.addRules([{
conditions: [new chrome.declarativeContent.PageStateMatcher({
pageUrl: {hostEquals: 'app.asana.com'},
})
],
actions: [new chrome.declarativeContent.ShowPageAction()]
}]);
});
chrome.commands.onCommand.addListener(function(command) { // shortcut keys for copy, print
chrome.tabs.executeScript({code: `ContentScript.sendEls('${command}');`});
});
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log('background listener function');
...
(Справочная информация: это мое первое расширение, и оно не тривиально, так что я вполне могу ошибиться! Извините, что не включаю минимальный и полный проверяемый пример, но общие примеры передачи сообщений с документацией по расширению don ' Эта проблема возникает, как и мое большое расширение. Вы можете повторить мою проблему, установив ссылку, указанную выше, но вам также нужно будет использовать asana.com, так как мое расширение - page_action для Asana.)
Большое спасибо за любые идеи и идеи!
Larry