mosheng 发表于 2026-10-9 20:40:34

FBro 多标签浏览器(通用浏览 + 多账号工作台)C++源码

本帖最后由 mosheng 于 2026-10-9 20:46 编辑

# FBro 多标签浏览器(通用浏览 + 多账号工作台)

基于 LingBuilder 灵码 + `new_emoji` 自绘界面 + FBro/CEF 135 x64 内核的多标签浏览器工程。
每个普通标签页与每个账号环境都是真实浏览器页面;账号环境为**独立进程 + 独立缓存目录 + 独立代理/UA**,
可直接用于多店铺 / 多账号场景。书签、历史、设置、环境定义全部为 exe 目录下的明文 JSON,可读可改。

- 工程类型:`new-emoji` 后端窗口项目(projectId `fbro-browser-shell`,x64,`browserShell` 窗口框架)
- 依赖模块:`lingbuilder.new_emoji.ui`、`lingbuilder.fbro.browser`、`lingbuilder.new_emoji.fbro-shell@1.4.0`、`lingbuilder.fbro.sdk`(CEF 135 运行时),以及为持久化启用的 `fs.core` / `data.json` / `std.datetime` / `system.shell` / `std.text` / `system.clipboard` / `std.encoding`
- 主源码:`src/fbro-browser-shell/MainWindow.lcpp`(约 900 行,纯灵码 DSL,0 处内嵌 C++)+ `项目全局变量.lcpp`
- 窗口设计模型:`.lingbuilder/projects/fbro-browser-shell/window-designer.json`(58 个组件)

## 功能总览与验证状态

| 功能 | 说明 | 真机验证 |
|---|---|---|
| 多标签浏览 | Chrome 式标签条、新建/关闭/关闭其他/切换、后退/前进/刷新 | ✅ |
| 标签标题=环境名 | 标签/环境列表显示**环境名**(创建时名称),不随网页标题变化;`浏览器外壳_取标题()` 仍返回网页标题供收藏/历史 | ✅ 图 05/06/11(2026-10-08) |
| 新建标签 + 号定位 | 标签条宽与 + 号位置一律用 DLL 读回值(`NE标签页_取标签条内容宽` + `NE标签页_取项矩形2`,末签右缘+8),猜测公式已删;1/2/3 标签 × 侧栏开合六组矩阵全 PASS(8.00 / 3.75 / 3.67~8.33 逻辑像素,200% 与 150% 两档 DPI) | ✅ 图 08b 系列(2026-10-08 六组全验) |
| 工具栏图标 DPI 适配 | IconButton 图标字形按 `iconSize × DPI` 绘制,200% 下全部精确翻倍(☰ 6→12、前进 8×2.5→16×6 逻辑px) | ✅ 像素实测 7 图标(2026-10-08);全套新配图已更新 |
| 地址栏键入 | 点击获焦、Ctrl+A 全选、粘贴 URL、回车导航 | ✅ 图 09;2026-10-07 复核:粘贴+回车可提交并导航,逐字符键入被本机搜狗输入法吞(环境限制,非工程缺陷) |
| 新标签页 | 本地 HTML(`data/newtab.html`):搜索框 + 常用站点卡片,随设置实时重建 | ✅ 图 01 |
| 侧栏工作台 | ☰ 一键展开/收起 300px 侧栏,网页视口自动让位、伴随宿主实时跟随;顶部四个页签按钮悬停提示已逐个实测 | ✅ 图 02、图 15 |
| 账号环境列表 | 侧栏富列表绑定外壳会话:标题/地址/状态/PID 实时同步,选中高亮;行内按钮右缘收进行内容宽 | ✅ 图 02/05/13b |
| 环境创建 | 侧栏表单(名称/地址/缓存目录/代理/UA)→ `浏览器外壳_新建独立实例代理` | ✅ 图 03/11(键入+保存+独立进程 PID 16912 实测) |
| 多环境隔离 | 每环境独立 Host 进程 + 独立 `.fbro-profiles/<id>` 缓存目录 | ✅ 图 05(PID 19840 / 2084 双进程 + 双目录实测) |
| 环境操作 | ▶ 切换、🍪 Cookie 置入、⏻ 关闭(保留会话可重开)、✕ 删除 | ✅ 切换图 06、Cookie 图 07/08、按钮完整见图 13b |
| Cookie 会话隔离 | 深色主题置入对话框,按稳定 ID 写入,日志不落明文,空/非法提交有中文校验 | ✅ 图 07/08(2026-10-08 深色美化重拍) |
| 书签 | 地址栏星标收藏/取消,书签页列表(打开/删除),`data/bookmarks.json` | ✅ 图 04、行按钮 ↗/✕ 完整见图 13b |
| 历史 | 导航自动记录、同址去重计数、上限 2000,历史页列表,`data/history.json` | ✅(文件与去重逻辑实测,列表 UI 与书签页同构) |
| 设置 | 主页地址 + 搜索引擎模板(`%s` 占位),保存即重建新标签页,`data/settings.json` | ⚠️ 页面与保存逻辑已编译通过,保存按钮未走完真机点击流程 |
| 持久化恢复 | 重启自动恢复书签/历史/设置/环境(环境自动拉起独立进程) | ✅ 图 05(重启后双环境自动恢复) |
| 右键菜单 | 标签页/地址栏/网页菜单接真功能(新建/关闭/复制网址/粘贴跳转/截图保存等) | ✅ 图 16/17/18(2026-10-08 全套实拍) |
| 快捷键 | Ctrl+T/W/L/R、Alt+←/→、Ctrl+D 收藏、Ctrl+H 历史、Ctrl+B 书签 | ✅ Ctrl+T 新建、Ctrl+D 收藏/不可收藏双路径实测(2026-10-07 复验) |

## 界面实拍(本机 150% DPI 真机运行;2026-10-08 全量修复后重拍)

新标签页(本地 HTML 快速入口,搜索直达;工程目录含中文,`file:///` 按 ⑨ 以 ASCII 路径展示):




侧栏工作台 · 账号环境页(标题、四个页签按钮、新建 + 按钮、会话列表带状态/PID/操作按钮):



新建账号环境表单(名称 / 打开地址 / 缓存目录 / 代理 / User-Agent):



书签页(★ 页签选中态,条目带打开/删除按钮;右侧百度页面完整铺满视口):



重启后双账号环境自动恢复(新标签页/主环境/店铺一号三标签并列,标签标题=环境名、
选中「店铺一号」渲染哔哩哔哩首页):



切换到店铺一号(独立宿主进程渲染哔哩哔哩,与主环境的百度互不共享会话):



Cookie 置入对话框(深色主题自绘:圆角面板、自绘标题与 ✕、深底浅字输入框、accent 置入按钮;
按稳定会话隔离,明文不落日志):




悬停提示改为独立顶层窗(`NewEmojiHoverTipWindow`),完整浮在网页之上不再被遮挡:





环境列表新版式(一行四操作按钮 ▶切换 🍪Cookie ⏻关闭 ✕删除、标题/状态文字 DPI 正常):



书签页列表(同批 RichList 修复:文字清晰、↗ 打开 / ✕ 删除一行对齐):




侧栏页签悬停提示(★「书签」):



--- 右键菜单三件套 ---

标签页右键菜单(新建标签页 / 关闭标签页 / 关闭其他标签页;弹层浮于侧栏面板之上,
侧栏展开时右键标签同样不被遮挡):



地址栏右键菜单(复制 / 剪切 / 粘贴 / 全选):



网页右键菜单(返回 / 前进 / 打印 / 查看网页源代码):



## 架构要点

- 网页像素由 **FBro 伴随宿主窗口**(`WS_POPUP + WS_EX_TOOLWINDOW` 顶层窗口)直接渲染,
`BrowserViewport` 只是布局占位;主窗口移动/缩放/DPI 变化时宿主自动同步。
- 账号环境 = 一实例一 `LingBuilderFbroHost` 进程 + 一条鉴权 WebSocket + 一个 Profile 目录 + 一个宿主 HWND。
- 侧栏在视口左侧独立成区,收起时视口回满宽;展开/收起后经 `浏览器外壳_选择标签页` 触发宿主几何重同步。
- 所有面板页(环境/书签/历史/设置/表单)为根容器下绝对定位控件组,用 `控件_设置可见` 互斥切换。
- 标签条:Tabs 控件按 chromeMode 自绘、单个标签宽按标题内容自适应(97~221 逻辑px 实测共存);
「重排浏览器布局」不再按 `chromeMaxWidth` 反推(⑧B 已删猜测公式),改用 DLL 读回值:
`NE标签页_取标签条内容宽` 定控件宽、`NE标签页_取项矩形2` 取末签矩形定右缘,+ 号放其后 8 逻辑像素处,
读回失败退回 260/39 估算兜底;RichList 行内容可视宽 =
列表宽 − 2×paddingX(280 − 20 = 260),行内节点 `x+w` 必须 ≤ 256 才不被滚动条带压到。
- 数据文件(exe 同目录 `data/`):
- `settings.json` `{"homeUrl","searchTemplate"}`
- `bookmarks.json` `[{"url","title","time"}]`
- `history.json` `[{"url","title","time","count"}]`(最新在前,上限 2000)
- `profiles.json` `[{"id","url","title","profile","proxy","ua"}]`(启动自动拉起)
- `newtab.html`(每次保存设置时重新生成)



## 下载地址

https://msimgimg.xyz/uploads/dem ... 9%A8.zip?v=mv0xquia





C++源码
**** Hidden Message *****

Looo 发表于 2026-10-12 23:19:49

kk                        

给云朵续费 发表于 2026-10-18 08:27:25

感谢分享

困成狗头 发表于 2026-10-18 16:37:37

看看怎么个事

夜色迷人 发表于 2026-10-21 02:38:07

路过,看看,支持下

Kaitlyn11 发表于 2026-10-24 10:41:22

{:6_448:}{:6_448:}{:6_448:}{:6_448:}{:6_448:}{:6_448:}

Xavier100 发表于 5 天前

感谢分享

Penelope41 发表于 昨天 12:38

来看看,支持下

气泡水咕噜 发表于 半小时前

看看怎么个事
页: [1]
查看完整版本: FBro 多标签浏览器(通用浏览 + 多账号工作台)C++源码