Использование долгоживущих соединений
Мы рассмотрели обмен сообщениями один запрос один ответ. Иногда нужно производит передачу, которая длиться дольше. Для этих целей предназначен метод chrome.runtime.connect
, который доступен в сценариях веб-страницы, контент сценария и Popup сценариях.
Данный метод первым параметром принимает extensionID
- идентификатор расширения, которое подключается к долгоживущему соединению. Второй параметр объект, который содержит дополнительную информации о соединении, например: {"name" : "connection1"}
. Сам метод возвращает объект port
, а при помощи метода port.postMessage
происходит отправка сообщения.
var port = chrome.runtime.connect("...",{"name" : "connection1"});
port.onMessage.addListener(function(message) {
console.log(message);
});
port.postMessage("Test message X");
Примечание:
Event-сценарий редко использует методchrome.runtime.connect
, и в основном вы будете встречать событийный методchrome.runtime.onConnect
илиchrome.runtime.onConnectExternal
. Об этом можно почитать больше на https://developer.chrome.com/extensions/messaging#external.
Чтобы принять сообщение, используется перехватчик chrome.runtime.onConnectExternal
, в который передается объект port
. И наконец, чтобы слушать входящие сообщения, назначаемport.onMessage
. В результате оба скрипта имеют доступ к общему порту, и могу одновременно прослушивать сообщения. Как показано в коде ниже:
chrome.runtime.onConnectExternal.addListener(function(port) {
//if(port.name == "connection1")
port.onMessage.addListener(function(message) {
console.log(message); //Test message X
port.postMessage("Test message Y");
});
});