Подскажите пожалуйста, как мне отправить сообщение из 2го в 1й скрипт?
Смотрел вот тут описание, но без примера я ничего не понимаю...
Есть 2 скрипта, 1й(background.js) висит в приложении постоянно, 2й(maps.js) подключается только к определённым страницам.
В background.js
chrome.runtime.onMessage.addListener // Отлов сообщений
(
function(request, sender, sendResponse)
{
switch(request.id) // Это типа идентификатор сообщений
{
case 2: // GET запрос
{
GetHttpRequest(request.href, {rid: request.rid})
break
}
}
}
)
Это дополнительная информация из background.js
function GetHttpRequest(href, arg) // Запрос
{
var xhr = new XMLHttpRequest()
xhr.withCredentials = true
xhr.onreadystatechange = function(e)
{
e.data = arg
ProcessRequestChange.apply(this, arguments)
}
xhr.open('GET', href, true)
xhr.send(null)
}
function ProcessRequestChange(e) // Обработчик запроса
{
var xhr = this
if(xhr.readyState != 4) return
if(xhr.status == 200)
{
var html = xhr.responseText
switch(e.data.rid) // Это типа идентификатор запроса
{
case 3: // Покопаться в ответе на 'http://www.site.ru/bla-bla.php'
{
// Некий код который записывает необходимую информацию в str убрал для экономии
var str = 'ответ' // Пусть будет это ответом
chrome.tabs.query // Вроде это какое - то событие открытия(или получения) вкладок?
(
{active: true, currentWindow: true}, // Х.з
function(tabs)
{
chrome.tabs.sendMessage // Это то, что отправляет ответное сообщение
(
tabs[0].id, // Х.з, наверное идентификатор вкладки, куда отправить?
{greeting: "hello"}, // Это я так понял и есть ответ?
function(response) // А это вообще не нужно вроде...
{
console.log(response.farewell);
}
)
}
)
break
}
}
}
}
В maps.js:
chrome.runtime.sendMessage // Отправить сообщение в background.js
(
{id: 2, href: 'http://www.site.ru/bla-bla.php', rid: 3}, // Сделать запрос на адрес
function(response) // Функция ответа не может быть вызвана, т.к. ответ не отправляется из background.js
{
document.querySelector('#fades').style.display = 'inline'
document.querySelector('#guild').style.display = 'inline'
document.querySelector('#mercenary').innerHTML = 'jhg'
}
)
Так вот, вся проблема заключается в том, что в background.js сначала нужно послать запрос, получить ответ, покопаться в ответе, и только потом отправить ответ на сообщение в maps.js.