Внутренние элементы расширения Chrome - PullRequest
0 голосов
/ 22 февраля 2012

Я пытаюсь понять внутренности Chrome Extension.Было бы здорово, если бы вы могли предоставить более подробную информацию по этому вопросу.

Я понимаю следующее:

  1. Расширения выполняются в своем собственном процессе.
  2. Расширения взаимодействуют сПроцесс браузера через IPC.

Мой вопрос: 1. Всякий раз, когда мы вызываем API расширения, например chrome.module.function () из пользовательского сценария расширения, я ожидаю, что функция перейдет в процесс рендерера.сначала, а затем отправьте IPC, такой как ExtensionHostMsg_ABC, процессу браузера, чтобы выполнить требуемую операцию.

                Extension Process                                  Browser Process

                                             ExtensionHostMsg_Req
               chrome.module.function()      ---------------->     Handle the msg

                                             ExtensionMsg_Response
                Send the result back to js   <----------------- 

Но, к моему удивлению, я вижу, что все функции API расширений объявлены и определены в файлах chrome / browser / extensions / xyz_api.h & .cc.Таким образом, похоже, что когда API вызывается из js, мы переходим непосредственно к процессу браузера.Где и как происходит это волшебство?

  1. Я также вижу некоторые привязки расширений кода c ++ в chrome / renderer / extensions / abc_bindings.cc и соответствующий код js в chrome / renderer / extensions / resources / abc.js.Я думаю, что у нас есть этот код для обмена некоторой информацией между рендерером расширений и кодом js.Это правильно?Можете ли вы дать мне пример сценария для этого?

Извините, что задаю эти основные вопросы.Я действительно ценю твою помощь.

1 Ответ

0 голосов
/ 25 февраля 2012

Относительно вашего вопроса о том, как сделаны привязки. Вы определяете свой API расширения в chrome/common/extensions/api/extension_api.json, как V8 устанавливает привязки C ++ JavaScript. Вот где происходит вся магия:)

Если вы хотите вызывать привилегированные API из скрипта контента, вам нужно добавить пространство имен в chrome/renderer/resources/extensions/renderer_extension_bindings.js

Для получения дополнительной информации о разработке системы расширения в Chromium, есть хорошие документы, которые объясняют всю модель процесса и взаимодействия: http://www.chromium.org/developers/design-documents/extensions

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