Skip to content

概述

foobar2000 最低版本: 2.0+

foo_ui_webview2 是一个 foobar2000 插件,使用 WebView2 技术替换默认用户界面,允许开发者使用现代 Web 技术(HTML/CSS/JavaScript)构建自定义 UI。

从 Spider Monkey Panel (SMP) 迁移?

v1.2.0 提供完整的 SMP 兼容层,包含:

  • 35 个 SMP 事件映射on_playback_new_track 等 SMP 事件名直接可用
  • 8 个包装器类 — FbMetadbHandle、FbTitleFormat、ContextMenuManager 等
  • 完整的 fb / plman 对象 — 同步属性、播放控制、播放列表管理

核心工作原理:通过「缓存 + 事件」将异步 API 包装为同步属性,以兼容 SMP 的同步语义。这是最终一致性模型(而非强一致),适合 UI 渲染场景;对于需要精确控制的事务性操作,应直接使用底层 fb2k.invoke() API。⚠️ SMP 的 GDI/GDI+ 绘图(on_paint(gr) 等)无法迁移,UI 渲染层需要用 HTML/CSS/Canvas 重写。→ 查看 SMP 兼容层完整文档

主要特性

API 分布

模块数量描述
playback27播放控制、状态、音量、路径播放
playlist45播放列表管理、智能列表
library21媒体库浏览、搜索、路径查找
artwork12封面、fb2k:// URL、批量获取、服务端缩放
config29配置、设备、持久化存储、输出设置
window72窗口控制、DWM 效果、多窗口系统
system9主题/DPI/语言、API 发现
file10文件读写、复制、移动、目录操作
dialog4文件/文件夹对话框
clipboard4剪贴板操作
shell4系统集成
http4HTTP 请求
ui5自定义菜单、通知
keyboard4全局快捷键
lyrics3歌词管理
metadata9元数据读写、批量读取
audio12音频分析、频谱、波形
console6日志输出
dnd4拖放支持
queue8播放队列管理
jitQueue7JIT 即时队列
discovery15服务发现、上下文菜单
dsp8DSP 效果器管理
output3音频输出设备
replaygain8ReplayGain 设置
playcount6播放统计、评分
titleformat5Titleformat 表达式评估
selection6选择同步、Viewer 模式
menu5主菜单/上下文菜单命令
misc9路径查询、首选项、控制台
panel2面板模式检测
test2测试工具

设计原则

foo_ui_webview2 遵循"插件做能力,应用做策略"的设计原则。

插件层职责(foo_ui_webview2 提供)

类别描述示例
foobar2000 核心能力播放控制、播放列表、媒体库、封面playback., playlist.
窗口管理DWM 效果、标题栏、缩放window.*
系统集成文件操作、对话框、Shellfile., dialog.
音频分析频谱、波形audio.*
配置存储持久化 key-value 存储config.*
流媒体能力通用 URL 播放、即时队列jitQueue.*

应用层职责(开发者实现)

类别描述为什么不在插件层
在线服务集成Spotify、网易云、QQ 音乐等业务逻辑、授权流程各异
歌词多源聚合在线搜索、翻译合并业务逻辑
封面缓存策略预加载、LRU 缓存策略选择
UI 主题与布局颜色、字体、动画应用特性

示例:能力 vs 策略

javascript
// ✅ 插件提供能力:获取封面
await fb2k.invoke('artwork.getFb2kUrl', { path: trackPath, maxSize: 200 });

// ✅ 应用层做策略:预加载/缓存
function prefetchCovers(albums) {
    albums.forEach(album => {
        const img = new Image();
        img.src = `fb2k://artwork/${encodeURIComponent(album.path)}?maxSize=200`;
    });
}