@drinkcsis

Chrome Extensions. Постоянно открытый порт chrome.tabs.connect(). Как?

Привет Уважаемые! Сразу к делу. в моем расширении для Google Chrome мне нужен постоянно открытый порт для связи popup.html(то есть та часть которая появляется при нажатии на иконку расширения в манифесте это «default_popup») и части которая отрабатывает непосредственно на самой вкладке (фоновая часть в манифесте это content_scripts{«js»:[«backgound.js»]}).

Сейчас у меня в popup.html написан код создающий соединение (я так понимаю он запускается при клике на иконку расширения в момент показа popup), код такой:

chrome.windows.getCurrent(function(w){
    chrome.tabs.getSelected(w.id,function(t){        
        port = chrome.tabs.connect(t.id);         
        port.onMessage.addListener(Answer);
    });
}); 

то есть он создает порт и подписывается на события отправки сообщений.

А в фоновом скрипте(background.js) есть такой код:

chrome.extension.onConnect.addListener(function(port){   
    window.port = port;
    port.onMessage.addListener(Question);   
});


то есть он ждет от расширения события создания коннекта и если оно возникает подписывается на событие отправки сообщения на созданный порт.
Это все хорошо работает и они «переплевываются» сообщениями, НО…

Внимание вопрос:
Если я нажимаю куда либо на вкладке(на сайте) то окно расширения естественно исчезает и соединение рвется. Все остальные попытки отправить что либо по данному порту из backround.js заканчиваются сообщением в консоли «Uncaught Error: Attempting to use a disconnected port object „
Как мне сделать постоянное соединение? Оно живо пока не закрыто окно расширения, как можно сделать так чтоб я спокойно клацал по сайту а окно расширение было открыто?

P.S. Вопрос очень срочный, если нужны уточнения пишите в личку. Огромное всем спасибо!
  • Вопрос задан
  • 5706 просмотров
Пригласить эксперта
Ответы на вопрос 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Попап каждый раз инициализируется при открытии и уничтожается при закрытии. Обойти это никак, разве что при закрытии порта начинать складывать сообщения в очередь и при открытии все их слать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы