跳到正文

SDK 事件系统

事件名使用冒号格式,例如 playback:trackChanged;方法调用使用点格式,例如 playback.play

订阅事件

javascript
// 订阅事件,返回取消订阅函数
const unsubscribe = fb.on('playback:trackChanged', (track) => {
    console.log('Now playing:', track.title);
});

// 取消订阅
unsubscribe();

一次性事件

javascript
fb.once('playback:trackChanged', (track) => {
    console.log('First track:', track.title);
});

取消订阅

javascript
// 方式一:使用返回的 unsubscribe 函数(推荐)
const unsub = fb.on('playback:time', handler);
unsub();

// 方式二:手动 off
fb.on('playback:time', handler);
fb.off('playback:time', handler);

播放事件

事件名触发时机数据
playback:trackChanged曲目切换
playback:stateChanged播放状态变化{state, position, duration} (state: "playing" / "paused" / "stopped")
playback:paused播放/暂停切换
playback:stopped播放停止{reason} ("user" / "eof" / "starting_another" / "shutting_down")
playback:starting播放即将开始{command, paused} (command: "play" / "next" / "previous" / "random")
playback:seeked播放位置跳转
playback:volumeChanged音量变化
playback:time播放时间更新(~1秒/次,整数秒)
playback:timeHighRes高精度时间更新(~100ms,小数秒,C++ 定时器轮询真实位置)
playback:orderChanged播放顺序变化
playback:queueChanged播放队列变化{origin} ("user_added" / "user_removed" / "playback_advance")
playback:edited当前曲目元数据被编辑
playback:dynamicInfo动态信息变化(网络流)
playback:dynamicInfoTrack动态曲目信息变化
playback:itemPlayed曲目播放完成{title, artist, album, duration, path, ...} (完整 track info)
playback:stopAfterCurrentChanged"当前曲目后停止"状态变化
playback:followCursorChanged"播放跟随光标"变化
playback:cursorFollowChanged"光标跟随播放"变化

播放列表事件

事件名触发时机数据
playlist:activated活动播放列表切换
playlist:created播放列表创建
playlist:removed播放列表删除
playlist:renamed播放列表重命名
playlist:reordered播放列表顺序变化
playlist:lockChanged锁定状态变化
playlist:itemsAdded曲目添加
playlist:itemsRemoved曲目移除
playlist:itemsReordered曲目重新排序
playlist:itemsReplaced曲目替换
playlist:selectionChanged选中项变化
playlist:focusChanged焦点曲目变化
playlist:defaultFormatChanged默认格式变化-
playlist:addComplete异步添加完成(广播)

媒体库 / 元数据事件

事件名触发时机数据
library:itemsAdded媒体库新增项目
library:itemsRemoved媒体库移除项目
library:itemsModified媒体库项目修改
library:initialized媒体库初始化完成
library:getAllResult异步 library.getAll 结果就绪LibraryGetAllResultPayload
metadata:writeComplete异步元数据写入完成MetadataWriteCompletePayload
metadb:changed元数据变化
selection:changed全局选择变化(50ms 节流)

音频事件

事件名触发时机数据
audio:spectrum频谱数据更新(需订阅)
audio:stream音频流数据更新(需调用 subscribeStream 订阅)音频流数据
audio:dspPresetChangedDSP 预设变化-
audio:outputDeviceChanged输出设备变化-
audio:replaygainModeChangedReplayGain 模式变化
audio:fullWaveformReady完整波形生成完成
audio:fullWaveformFailed完整波形生成失败

窗口 / 面板 / UI 事件

事件名触发时机数据
window:alwaysOnTopChanged置顶状态变化
window:stateChanged窗口状态变化规范字段 {isMaximized, isMinimized}(运行时暂兼容 maximized / minimized)
window:popupOpened弹出窗口打开
window:popupClosed弹出窗口关闭
window:beforeClose窗口关闭前确认
window:message跨窗口消息接收
window:behaviorChanged弹窗行为策略变更
window:minimizeSuppressed抑制最小化(Win+D 策略)
window:backdropStateChanged主窗口 / popup 的 DWM 激活/失焦策略生效
window:hoverStateChanged窗口悬停状态变化
panel:initialized面板初始化完成
panel:focus面板获得焦点-
panel:blur面板失去焦点-
panel:visibilityChangedDUI 面板可见性变化
panel:configChanged面板配置变化
ui:coloursChanged颜色主题变化-
ui:fontChanged字体变化-
ui:menuItemClicked菜单项点击
ui:toast通知消息
system:themeChanged系统主题变化
cursor:hiddenChanged光标隐藏状态变化CursorHiddenChangedPayload
taskbar:buttonClicked任务栏按钮被点击
webview:processFailedWebView 进程失败或恢复

Tray 事件

托盘图标为应用级(无来源窗口),事件广播到所有窗口。

事件名触发时机数据
tray:click单击托盘图标
tray:doubleClick双击托盘图标
tray:beforeContextMenu右键菜单弹出前(异步;处理器内修改仅影响下一次右键)
tray:menuItemClicked普通用户托盘项点击 / 富控件值变更

tray:menuItemClickedvalue 语义:普通用户项与 now-playing 卡片回报 {id}关闭菜单;富值控件回报 {id, value}保持菜单打开——rating0..5slider[min, max] 内的整数,segmented 为被选中分段的从 0 起索引。忽略 value 的前端保持既有 {id} 行为。内置 showPlaybackControls / showSystemItems 注入项,以及声明了 playbackAction 的项,由插件原生执行且不发此事件。

应用 / 键盘 / 菜单事件

事件名触发时机数据
app:beforeQuitfoobar2000 即将退出-
keyboard:hotkey已注册快捷键触发
menu:show自定义菜单打开
menu:select选中自定义菜单项
menu:dismiss自定义菜单关闭

跨窗口通信事件

事件名触发时机数据
port:connected命名通道连接
port:disconnected命名通道断开
port:message收到跨窗口消息
state:changed共享状态变更
state:deleted共享状态删除

插件事件

事件名触发时机数据
plugin:registered外部插件注册
plugin:unregistered外部插件注销
api:registered外部 API 注册
api:unregistered外部 API 注销
http:response异步 HTTP 请求完成
http:downloadComplete下载完成HttpDownloadCompletePayload
jitQueue:needNext后端请求下一首{currentTrackId, reason} (reason: "trackChange" / "prefetch")
jitQueue:trackChanged播放曲目变化
jitQueue:listExhausted缓冲区耗尽
jitQueue:preloadCompleteJIT 预加载完成JitQueuePreloadCompletePayload
jitQueue:error错误

所有事件同时派发为 fb2k:* DOM 事件(CustomEvent)。

完整事件参考及字段说明见 事件系统参考。 SMP 事件名映射见 SMP 兼容层