Как content script общается с background? (В google расширении)

238
21 февраля 2018, 12:21

Не получается подключить content script с background. Не реагирует.

Делал таким образом:

script.js:

chrome.extension.sendMessage('555555555');

background:

chrome.extension.onMessage.addListener(function(request){
    if(request=='555555555')
        console.log('Принято: ', request);
});

Что здесь не хватает? Есть ли еще способы общения background с content_script и наоборот content_script c background?

Answer 1

Самый простой случай.

  • отправляем сообщение в фоновую страницу
  • слушаем сообщение в фоновой странице
  • отправляем ответ (если нужно)

// content script  
 
chrome.runtime.sendMessage({method: "getGroup"}, function (response) { 
    if (response.status != null) { 
        //console.log('ответ пришел') 
    } 
}); 
 
// background script  
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) { 
  //console.log('все сообщения') 
  if (request.method === 'getGroup') { 
       //console.log('get groop') 
       sendResponse({status: 'yes'}); 
  } 
});

Answer 2

Такого метода как chrome.extension.sendMessage не существует. sendMessage и onMessage лежат в chrome.runtime!

Answer 3

В контент-скрипте требуется пробрасывать объект типа Port:

var port = chrome.runtime.connect();

В нем открываем слушатель:

port.onMessage(\* слушатель событий от background-скрипта *\);

В контент-скрипте также доступны объекты document и window - через них меняемся данными со страницей через обычные слушатели. Теперь рассмотрим background-скрипт:

chrome.runtime.onConnect.addListener(function (port) {
  port.onMessage.addListener(function (message) {
    // работаем с сообщениями от контент-скрипта
  });
  // и отправляем сообщения в контент-скрипты
  port.postMessage({/* тело сообщения */});
});
READ ALSO
Angular 2 - Дождаться ответа от сервера

Angular 2 - Дождаться ответа от сервера

Вопрос такой - как сделать, чтобы при выполнении такой функции

219
Редактирование jTable

Редактирование jTable

Добрый деньу меня появилась задача отредактировать элементы внутри класса

218
Синхронное добавление точек на карту

Синхронное добавление точек на карту

Имеется массив данных о клиентах, которых необходимо занести на карту в виде точекУ каждого клиента обязательно есть адрес, но может быть...

194