Chrome扩展内部件

问题描述:

我想了解Chrome扩展件的内部结构。如果你能提供更多关于这方面的细节,那将是非常好的。Chrome扩展内部件

我的理解如下:

  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函数的声明和铬/浏览器/扩展/ xyz_api.h & .cc的文件中定义。所以它看起来像是从js调用api时,我们直接进入浏览器进程。这种魔术在哪里以及如何发生?

  1. 我还看到一些扩展绑定C++在铬/渲染器/扩展/ abc_bindings.cc代码和在铬/渲染器/扩展/资源/ abc.js相应js代码。我认为我们有这个代码在扩展渲染器和js代码之间共享一些信息。这样对吗?你能为我提供一个例子吗?

对不起,提出这些基本问题。我非常感谢你的帮助。

关于您如何制作绑定的问题。您可以在chrome/common/extensions/api/extension_api.json中定义您的扩展API,这是V8如何设置C++ JavaScript绑定。这就是如果你想打电话从内容脚本特权的API,你需要的命名空间添加到chrome/renderer/resources/extensions/renderer_extension_bindings.js

有关的推广体系铬设计的更多信息,所有的魔法发生:)

,有很好的文档解释整个过程模型和交互: http://www.chromium.org/developers/design-documents/extensions