Связь расширения для браузера и активной страницы

Пробую сделать расширение для браузера и столкнулся с одним непонятным моментом. Как сделать, чтобы скрипт мог видеть сразу и popup расширения, и активную страницу в браузере? Для примера: в расширении поле для ввода и кнопка. Вводим текст в поле, нажимаем кнопку и в какой-то элемент на странице в браузере вставляем то, что ввели. Прошу дать хотя бы наводку. P.s.: расширение делаю для оперы, если это важно


Ответы (1 шт):

Автор решения: Alexander Lonberg

Можно воспользоваться несколькими вариантами:

  • самый простой, но не всегда удобный, комбинировать отправку/прием сообщений
    • runtime.sendMessage - отправить сообщение, но только не скрипту контента, например из popup в background
    • tabs.sendMessage - отправить сообщение табу
    • runtime.onMessage - устанавливает слушателя сообщений
  • немножко сложнее, но максимально гибкий
    • runtime.connect - из всех зависимых скриптов(контент,popup, и т.п.) запрашиваем соединение с background
    • runtime.onConnect - в background принимаем соединиения
    • ... далее, в этом варианте, используем для связи долгоживущий порт, по которому очень легко передавать/получать сообщения в обе стороны.

PS: Расширение лучше делать и тестировать в Chrome, а после установить его в Оперу.

→ Ссылка