Насколько мне известно, "externally_connectable"
- единственный официальный способ отправки сообщений (с данными) с веб-страницы, как упоминалось здесь
Это требует предопределенных значений для каждого отдельного домена. Но что, если вы хотите сделать только одно расширение для приема сообщений с любой веб-страницы?
Если вы просто хотите уведомить другую сторону о чем-то, вы можете использовать нативный JS Event
, отправляя его на document
с одной стороны и прослушивая его на document
также с другой стороны, поскольку document
совместно используется страницами расширения content script
и страница в Интернете.
Вы не можете использовать JS CustomEvent
для отправки данных, поскольку каждый раз, когда вы отправляете данные, вы получаете их пустыми в результате sandbox
эффекта любого расширения.
Если вы хотите обмениваться данными, то единственный обходной путь, который я знаю до сих пор, - после того, как я потратил около месяца на разработку расширения - должен иметь комбинацию между каким-то хранилищем и JS
собственным механизмом событий.
Пошаговое решение (предположим, вам нужна веб-страница для отправки некоторых данных в расширение):
- Сделайте событие
document
с веб-страницы.
- Временно сохраните данные в любой технологии хранения, которую вы предпочитаете (localStorage, сам DOM или что-то еще ...)
- Получите событие на другой стороне (расширение), прослушивая
document
.
- Прочтите данные и удалите их.
Надеюсь, это поможет кому-то или откроет дверь для обсуждения, как это лучше сделать.
person
Mouneer
schedule
09.09.2016