Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.01.2017, 06:03
Профессор
Отправить личное сообщение для Артист Посмотреть профиль Найти все сообщения от Артист
 
Регистрация: 25.09.2016
Сообщений: 163

Google Chrome обмен сообщениями.
Пишу приложение для браузера.
Есть контент скрипт, он подключается только к определенному сайту и на определённую страницу.
Есть фоновый скрипт, скрипт самого приложения, он всегда загружен.

Нужен обмен сообщениями между этими скриптами, в любом направлении и количестве.

Читал про долгоживущие сообщения - нихрена не понял, они могут отправлять к вкладке или нет?

Последний раз редактировалось Артист, 04.01.2017 в 09:39.
Ответить с цитированием
  #2 (permalink)  
Старый 05.01.2017, 05:27
Профессор
Отправить личное сообщение для Артист Посмотреть профиль Найти все сообщения от Артист
 
Регистрация: 25.09.2016
Сообщений: 163

Кто может объяснить, могут ли накапливаться асинхронные ответы?

Вот контент скрипт:
function sMcalback(response) // Функция-обработчик ответов на сообщения
{
	switch(response.id) // Ответ
	{
		case 1: // Это мгновенный(синхронный) ответ
		{
			// Некий код
			break
		}
		case 2: // Это асинхронный ответ
		{
			// Некий код
			break
		}
	}
	return true
}
chrome.runtime.sendMessage({id: 1}, sMcalback) // Отправить сообщение, ответ не требуется
chrome.runtime.sendMessage({id: 2}, sMcalback) // Отправить сообщение, ожидается мгновенный(синхронный) ответ
chrome.runtime.sendMessage({id: 3}, sMcalback) // Отправить сообщение, ожидается ответ через некоторое время(асинхронный)

Вот фоновый скрипт:
chrome.runtime.onMessage.addListener // Отлов сообщений chrome.runtime.sendMessage
(
	function(request, sender, response) // Сообщение, какая-то инфа о отправителе, инфа для канала ответа
	{
		switch(request.id)
		{
			case 1: // Здесь не требуется ничего возвращать
			{
				// Некий код
				break
			}
			case 2: // А вот тут нужно вернуть ответ сразу(синхронно)
			{
				// Некий код
				response({id: 1}) // Вернуть ответ для chrome.runtime.sendMessage
				return false // Синхронный ответ
				break
			}
			case 3: // Тут нужно вернуть ответ спустя некоторое время(асинхронно), и не один
			{
				// Некий код, передача инфы для ответа и идентификатора ответа = {r: response, id: 2}
				break
			}
		}
		return true // Ответ на сообщение будет послан спустя некоторое время(асинхронно)
	}
)


Сообщение из контент скрипта фоновому посылается 1 раз, и так же ожидается 1 ответ.
Мне нужно 1 раз отправить сообщение, но ответов может быть хоть 100.

Вот и хочу узнать может можно сохранять все "накопленные" асинхронные ответы, которые не были отправлены.
И использовать их. Или же они уничтожаются при новом сообщении?

Вот у меня при отправке:
chrome.runtime.sendMessage({id: 1}, sMcalback) // Отправить сообщение, ответ не требуется

Ответ никогда не отсылается, но он ожидается(возвращается true), получается где-то висит возможность ответить на это сообщение.
Ведь если сначала отправить сообщение с асинхронным ответом, а потом с синхронным, и ответ синхронный не перебьёт асинхронный?
Что написал сам не понял, в общем должно же работать(разработчики же не совсем идиоты)?

Или делать так?:
Когда отправляются сообщения не требующие ответа - закрывать их(отправлять мгновенный пустой ответ, или не назначать обработчик ответа - сообщение само отправится при возврате false), чтобы они не висели в памяти, или где они там висят.
Когда нужно получить много ответов, после каждого ответа отправлять пустое сообщение с асинхронным ответом, и использовать его как следующий ответ.

П.С. chrome.tabs.query - возможность отправлять сообщения из фонового в контент скрипт.
Мне она не подходит, т.к. никак не узнать с какой страницы было послано сообщение.
1 - Страниц может быть много. А сами сообщения посылаются только когда нажимаешь кнопку.
2 - Страница может быть закрыта.

Последний раз редактировалось Артист, 05.01.2017 в 05:48.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
синхронный обмен в Chrome matfor2013 AJAX и COMET 0 02.12.2013 15:41
Как работает Google Analytics: смотрю в "Инструментах разработчика" Chrome hrundel Общие вопросы Javascript 0 10.10.2013 19:31
frames в google chrome sasha.sivakov@mail.ru Общие вопросы Javascript 1 28.02.2012 22:47
Обмен сообщениями между js загруженной страницы и расширением для браузера prihod Events/DOM/Window 6 11.12.2011 21:51
Google Chrome перерисовка страницы во время выполнения скрипта Dekart Javascript под браузер 0 08.06.2010 08:35