2017-01-25 6 views
0

Я просматриваю расширение хром и сталкивался с этими двумя сомнениями, которые я хотел уточнить.Необходимо настроить прослушиватель событий для хромовых расширений

В расширения, что я рассматриваю, я получаю, чтобы увидеть часть кода в файле «background.js», где сообщение передается в скриптах контента с помощью следующих строк кода:

chrome.tabs.query({active: !0, currentWindow: !0}, function (a) { 
chrome.tabs.sendMessage(a[0].id, {action: "process_page"}, function (a) { 
         }) 
        }) 
  1. Мой первый запрос заключается в переданном json-ified сообщении ({action: "process_page"}). Мне не удалось найти какие-либо связанные события прослушивателя в любом месте базы кода для сообщения (process_page). Фактически, «process_page», кажется, существует только один раз во всей базе кода, и это тоже в файле background.js. Итак, я хотел знать, является ли прослушиватель событий обязательным для всех методов chrome.tabs.sendMessage или является прослушивателем событий необязательным.

  2. Мой второй запрос - из документа chrome.tabs Google - https://developer.chrome.com/extensions/tabs#type-Tab, я понял, что первый параметр метода sendMessage соответствует идентификатору табуляции. Но я хотел бы понять, почему он был представлен как «a [0] .id»?

Любые четкие указатели или пояснения будут действительно полезными.

+1

Посмотрите на хром .runtime.onMessage, chrome.runtime.onConnect и устаревший предшественник chrome.extension.onRequest. По-видимому, это расширение обрабатывает любое сообщение независимо от его содержимого. – wOxxOm

+0

@wOxxOm Спасибо за ответ. Ну, пожалуйста, помогите мне понять, что вы имели в виду «По-видимому, это расширение обрабатывает любое сообщение независимо от его содержимого». – mbvee

+0

U hm, это просто так. Расширение может просто не заботиться о фактическом содержимом сообщения, оно скорее делает что-то по самому факту получения сообщения, или отправителю сообщения, или, может быть, этот код остался и ничего не делает. – wOxxOm

ответ

0
  1. Слушатель событий не является обязательным: но без прослушивателя отправленное сообщение не будет иметь никакого эффекта.

  2. Он представлен в виде a[0].id, потому что аргумент функции является массивом Tab объектов (см documentation for chrome.tabs.query. a[0].id вкладки Идентификатор первой вкладки в массиве, возвращаемый запрос.

+2

Вы должны расширить # 1, чтобы объяснить, что все слушатели настроены на прослушивание всех полученных сообщений. Это зависит от того, что слушатель должен декодировать содержимое сообщения, чтобы определить, является ли оно чем-то, что он знал, как обрабатывать (т. Е. Объяснить, почему 'process_page' не может быть где-либо еще в коде). – Makyen

+0

Благодарим вас за подробные разъяснения. Как вы думаете, могут ли быть какие-либо уязвимости в том, что сообщение открыто в воздухе, не обращаясь к ним ни в одном из слушателей событий. – mbvee

+0

@Viman Я не вижу уязвимостей, но создание объекта для передачи его в качестве аргумента без необходимости неэффективно. –