Только после перезапуска браузера Chrome: chrome.runtime.sendMessage () не отправлено или не вызвана функция прослушивателя chrome.runtime.onMessage - PullRequest
0 голосов
/ 05 июля 2018

Мое расширение (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

1 Ответ

0 голосов
/ 06 июля 2018

Мой коллега решил это. Слушатель onMessage был неправильно внутри прослушивателя onInstalled, как показано в последнем блоке кода в вопросе.

Я должен был понять, что когда Chrome перезапускается каждый раз (после первоначальной установки расширения), ни один из этих кодов не выполняется / не существует, поэтому больше нет обработчика onMessage для запуска. Но я никогда не видел его в течение нескольких недель разработки, потому что я редко закрываю хром! И так как я был в тяжелой разработке, я постоянно делаю переустановки расширения и, таким образом, определяю прослушиватель onMessage в моем уникальном случае - не так для большинства пользователей!

Спасибо ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...