手写一个极简Chromium浏览器
作为一个PC客户端开发老兵,带你用300行代码理解Chromium架构
背景
很多同学想学习Chromium内核,但面对几千万行代码望而却步。今天我带大家用最简单的方式,实现一个”类Chromium”浏览器,核心代码只有约300行。
技术选型
为什么选择WebView2?
- 微软官方提供的Chromium嵌入控件
- 保留Chromium核心能力(JS引擎、渲染、网络)
- API简单易学
- 不需要了解Chromium内部复杂架构
vs 完整Chromium
| 特性 |
完整Chromium |
我们的极简版 |
| 代码量 |
千万行 |
~300行 |
| 进程数 |
多个 |
1个 |
| 编译时间 |
小时级 |
秒级 |
| 学习曲线 |
陡峭 |
平缓 |
核心实现
1. 窗口创建
1 2 3 4 5 6 7 8 9
| g_hwnd = CreateWindowExW( 0, kClassName, L"MiniChromium", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 1200, 800, nullptr, nullptr, hInstance, nullptr );
|
2. WebView2初始化
1 2 3 4 5 6 7 8 9 10 11 12
| ICoreWebView2Environment* env = nullptr; CreateCoreWebView2Environment(IID_PPV_ARGS(&env));
env->CreateCoreWebView2Window( g_hwndWebView, IID_PPV_ARGS(&g_webView) );
g_webView->Navigate(L"https://www.baidu.com");
|
3. 完整代码
查看完整源码
编译运行
1 2 3 4 5 6 7 8 9
| git clone https://github.com/shangsh/chromium-mini-browser.git
cd chromium-mini-browser build.bat
bin\MiniChromiumBrowser.exe
|
架构图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| ┌─────────────────────────────────────┐ │ Browser Process │ │ ┌─────────────────────────────┐ │ │ │ Win32 Main Window │ │ │ │ ┌───────────────────────┐ │ │ │ │ │ Toolbar + URL Bar │ │ │ │ │ └───────────────────────┘ │ │ │ │ ┌───────────────────────┐ │ │ │ │ │ WebView2 (Chromium)│ │ │ │ │ │ - 渲染进程 │ │ │ │ │ │ - JavaScript引擎 │ │ │ │ │ │ - 网络栈 │ │ │ │ │ └───────────────────────┘ │ │ │ └─────────────────────────────┘ │ └─────────────────────────────────────┘
|
扩展挑战
完成基础功能后,可以尝试:
- 多标签页:使用Tab控件管理多个WebView2
- 书签管理:实现收藏功能
- 下载管理:监听下载事件
- 开发者工具:集成DevTools协议
总结
通过这个极简版浏览器,我们可以用最少的代码理解:
- Win32窗口和消息循环
- COM接口基本概念
- WebView2 API使用
- Chromium架构入门
这为后续深入学习Chromium内核打下坚实基础。
项目地址: https://github.com/shangsh/chromium-mini-browser
有问题欢迎评论区交流~