Chrome扩展内部件
问题描述:
我想了解Chrome扩展件的内部结构。如果你能提供更多关于这方面的细节,那将是非常好的。Chrome扩展内部件
我的理解如下:
- 扩展在自己的进程中运行。
- 扩展插件通过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时,我们直接进入浏览器进程。这种魔术在哪里以及如何发生?
- 我还看到一些扩展绑定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