首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

FireBreath 3 插件框架架構深度解析

     編輯:關於C++

FireBreath 項目目錄結構

FireBreath根目錄/
├── build/                 # 編譯輸出目錄
│   ├── bin/               # 生成的插件 .dll/.so
│   ├── boost/             # 編譯後的 Boost 庫
│   └── projects/          # 各平台工程文件
├── cmake/                 # CMake 腳本
├── fbgen/                 # Python 專案生成腳本
├── gen_templates/         # 專案配置模板
├── Installer/             # 安裝程序相關
├── projects/              # 插件源碼目錄
│   ├── MPPReader/
│   └── OfdPlugin/
├── src/                   # FireBreath 核心源碼
└── tests/                 # 測試用例

核心類圖結構

PluginCore:插件核心

  • PluginCore:插件主類,管理生命周期、腳本接口註冊。
  • PluginWindow:窗口抽象,處理平台相關窗口事件(Windows HWND、Linux X11 Window、Mac NSView)。
  • PluginEventSink:事件接收器,通過 HandleEvent 建立消息映射。
  • PluginEventSource:事件源,分發瀏覽器事件(鍵盤、鼠標、繪製、焦點等)。
  • PluginEvent:事件基類,派生出具體事件類型。

NpapiCore:NPAPI 適配層

封裝 NPAPI 接口(NPN_*、NPP_*),實現瀏覽器與插件的雙向調用:

  • NpapiPlugin:實現 NPP_* 入口函數,轉發給 PluginCore。
  • NpapiBrowser:封裝 NPN_* 函數表,提供線程安全調用。
  • ScriptObject:腳本對象包裝,支持 JavaScript 調用插件方法、屬性訪問。

PluginAuto:自動化腳本綁定

基於模板元編程,自動將 C++ 方法/屬性暴露給 JavaScript:

  • AutoGeneratedScriptObject:自動生成的腳本對象基類。
  • MethodMap/PropertyMap:編譯期構建的方法/屬性映射表。
  • Variant:類型擦除容器,支持 JS 基本類型與 C++ 類型雙向轉換。

MPPReader:具體插件示例

項目特定邏輯:

  • MPPReaderPlugin:繼承 PluginCore,註冊 MPP 文件解析接口。
  • DocumentParser:解析 MPP 格式,提取文本/圖片/結構。
  • RenderEngine:渲染引擎封裝,支持縮放、平移、選中等交互。

關鍵設計模式

模式應用場景
橋接模式PluginCore 與平台窗口分離
觀察者模式PluginEventSink/Source 事件分發
工廠模式fbgen 根據配置生成專案
適配器模式NpapiCore 適配 NPAPI C 接口
模板方法PluginAuto 自動綁定元編程

構建流程

  1. 運行 fbgen.py 生成平台工程(VS Solution、Xcodeproj、Makefile)。
  2. 進入 build/projects/ 編譯核心庫與插件 DLL/so。
  3. 輸出至 build/bin/,配合安裝程序部署。

總結

FireBreath 通過清晰的分層架構(核心、NPAPI 適配、自動化綁定、業務插件)實現跨瀏覽器、跨平台插件開發。理解其類圖與目錄結構,有助於二次開發、調試與性能優化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved