Слушатель chrome.runtime.onMessage никогда не запускается

Я пытаюсь установить текст значка для каждой вкладки в Chrome.

Я выполнил этот ответ https://stackoverflow.com/a/32168534/8126260, чтобы сделать это, хотя обработчик событий chrome.runtime.onMessage никогда не запускается.

// tab specific badges https://stackoverflow.com/questions/32168449/how-can-i-get-different-badge-value-for-every-tab-on-chrome
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
  console.info('runtime message');
  if (message.badgeText) {
    console.info('runtime message with badge text');
      chrome.tabs.get(sender.tab.id, function(tab) {
          if (chrome.runtime.lastError) {
              return; // the prerendered tab has been nuked, happens in omnibox search
          }
          if (tab.index >= 0) { // tab is visible
              chrome.browserAction.setBadgeText({tabId:tab.id, text:message.badgeText});
              console.info('set message');
          } else { // prerendered tab, invisible yet, happens quite rarely
              var tabId = sender.tab.id, text = message.badgeText;
              chrome.webNavigation.onCommitted.addListener(function update(details) {
                  if (details.tabId == tabId) {
                      chrome.browserAction.setBadgeText({tabId: tabId, text: text});
                      chrome.webNavigation.onCommitted.removeListener(update);
                  }
              });
          }
      });
  }
});

// block outgoing requests for help widgets
chrome.webRequest.onBeforeRequest.addListener(
              function(details) {
                //send message

                console.info('send message');
                chrome.runtime.sendMessage({badgeText: "HELP"});

                  if (isDisabled) {
                    return { cancel: false } // this should return from the function (details) level
                  } else {
                    return { cancel: true }
                  }
              },
              {urls: [
                "a bunch of urls irrelevant to this question"
              ]},
              ["blocking"]);

(весь исходный код находится на https://github.com/bcye/Привет-до свидания)

Глядя в консоль моего фонового скрипта, появляется сообщение об отправке, означающее, что chrome.runtime.sendMessage({badgeText: "HELP"}); должен был быть выполнен.

Однако ни один из операторов console.info в прослушивателе onMessage не выполняется.

Вы отправляете сообщение слушателю в фоновом сценарии? Это не сработает, целью должна быть другая страница. На той же странице вы можете использовать стандартные методы js, такие как прямой вызов функции или настраиваемый подписчик/эмиттер событий.

wOxxOm 07.04.2019 21:43

@wOxxOm да, я отправляю их из файла background.js. Хотя как я мог получить идентификатор вкладки, поскольку при прямом вызове функции я не получил бы объект-отправитель.

Bruce 07.04.2019 21:45
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решил, как @wOxxOm сказал, что это невозможно.

Хотя webRequest передает tabId в словаре деталей. Это можно использовать, чтобы воспроизвести это.

Другие вопросы по теме