Можете ли вы открыть несколько страниц расширения Chrome, которые используют chrome.runtime.onMessage.addListener? - PullRequest
0 голосов
/ 14 марта 2019

У меня странная ситуация, когда одна страница контента, кажется, сводит на нет связь фонового скрипта со всеми остальными.

Это странно, поскольку я вижу, что вызовы проходят к фоновому скрипту в DevTools, но как толькокогда я открываю копии главной страницы содержимого chrome-extensions: //xxx/index.html, все остальные страницы, ожидающие результата от chrome.runtime.sendMessage, не получают его.

Я не уверен, имеет ли это отношение к предупреждениям:

Примечание. Если несколько страницпрослушивают события onMessage, только первый, кто вызвал sendResponse () для определенного события, успешно отправит ответ.Все остальные ответы на это событие будут игнорироваться.

Если честно, я нахожу этот текст немного двусмысленным в моем случае.Я думаю, что в обработчике это означает, что sendResponse() может быть вызван только один раз, но это не то, что здесь происходит, так как содержимое sendMessage() представляет собой отдельную страницу / процесс.

Опять же, оно заявляет "несколько страниц ", значит ли это, что только одна страница за раз может использовать browser.runtime.onMessage.addListener()?

Я в замешательстве.

Если я закрою одну из страниц основного контента (страницы ссамая сложная сборка) и оставьте открытыми некоторые из гораздо более простых страниц содержимого (при загрузке которых выполняется только один вызов фонового скрипта), все более простые страницы содержимого (без слушателей) будут работать.

Как только я откроюглавная страница контента (со слушателем), более простые страницы больше не работают, и если я открою две страницы основного контента, ни одна из страниц (со слушателями) не будет работать.

Отправка моего сообщенияобернут в вспомогательную библиотеку, которую я использую для сериализации и обработки ошибок из переданных сообщений, и, кроме того, я использую Polyfill Web Extensions, чтобы предоставить мне более хороший API на основе обещаний, но это будетru Работаю со всем, что мне показывали за последние два месяца, и это приложение сложное.

Я использую одноразовый формат отправки сообщения:

browser.runtime.sendMessage(id || null, payload).then( ... )

Далеешаг - посмотреть на долгоживущее соединение.

Я уверен, что это должно быть проблемой, с которой сталкивались другие.

У кого-нибудь было что-нибудь подобное?

Приветствия,Dave

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...