拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Bilibili-Evolved 快捷键扩展「无动作」插件:用空动作屏蔽 B 站原生快捷键

Bilibili-Evolved 快捷键扩展「无动作」插件用空动作屏蔽 B 站原生快捷键【免费下载链接】Bilibili-Evolved强大的哔哩哔哩增强脚本项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved导读「无动作」快捷键扩展 - 无动作是 Bilibili-Evolved 仓库中一个短小精悍的插件它在脚本的快捷键动作列表里注册一个名为无动作的占位动作把任意按键绑定到这个动作上就能阻止该按键原有的快捷键行为从而屏蔽 B 站页面自带快捷键如投币的C、全屏的W等。读完本文你将掌握这个插件如何安装启用、它阻止原生快捷键的底层实现原理prevent标志与事件拦截逻辑、以及如何配合快捷键扩展组件实现自定义按键 屏蔽原生按键的完整方案。插件定位一个动作、两行注册该插件的文档只有一句话在快捷键的动作列表里添加一个 无动作, 将按键绑定到这个上面就可以阻止原有的快捷键行为.它位于仓库的 registry/lib/plugins/utils/keymap-empty-action.ts/index.md对应实现为同目录下的 index.ts。整个插件通过 Bilibili-Evolved 的插件数据槽addData完成注册核心代码非常精简export const plugin: PluginMetadata { name: keymap.actions.empty, displayName: 快捷键扩展 - 无动作, setup: ({ addData }) { addData(keymap.actions, (actions: Recordstring, KeyBindingAction) { actions.empty { displayName: 无动作, prevent: true, run: none, } }) addData(keymap.presets, (presetBase: Recordstring, string) { presetBase.empty }) }, }从源码结构看它做了两件事通过keymap.actions数据槽向动作列表注册empty动作显示名为无动作通过keymap.presets数据槽在presetBase默认按键表中为它登记空字符串按键即默认不绑定任何键完全由用户自行指定。安装与启用方式这是一个标准的用户插件PluginMetadata在 Bilibili-Evolved 中安装启用即可打开脚本的设置面板进入「用户插件」页面或通过在线插件仓库搜索无动作启用「快捷键扩展 - 无动作」插件后打开「快捷键扩展」组件的设置快捷键列表即可在动作列表中看到新增的无动作一行在其自定义按键栏填入想要屏蔽的原生快捷键失去焦点时自动保存见 help.md 对自定义按键文本框的描述。前置条件该插件只提供无动作这个动作本身其生效依赖「快捷键扩展」组件keymap见 registry/lib/components/utils/keymap/index.ts的快捷键分发机制因此需要同时启用「快捷键扩展」组件才能看到并配置该动作。工作原理prevent: true 空运行函数理解这个插件如何阻止原有的快捷键行为关键在于KeyBindingAction接口中的prevent可选字段以及run: none这个空实现。在 registry/lib/components/utils/keymap/bindings.ts 中定义了动作接口export interface KeyBindingAction { displayName: string run: (context: KeyBindingActionContext) unknown prevent?: boolean /** 默认打字时忽略快捷键, 将此属性设置为 false 可以在打字时允许触发快捷键 */ ignoreTyping?: boolean /** 默认聚焦在可聚焦元素时不忽略快捷键, 将此属性设置为 true 可以在聚焦时禁止触发快捷键 */ ignoreFocus?: boolean }而 bindings.ts 在按键命中后的分发逻辑为const actionResult binding.action.run({ ... }) const actionSuccess !lodash.isNil(actionResult) if (binding.action.prevent ?? actionSuccess) { e.stopImmediatePropagation() e.preventDefault() }也就是说普通动作只有在run返回非null/undefined表示动作执行成功时才会阻止事件继续传播而无动作插件把prevent显式设为true并让run执行none一个来自/core/utils的空操作函数可在 src/core/utils 中确认其无操作实现。于是无论该动作是否做了什么只要按键匹配命中就会无条件执行e.stopImmediatePropagation()—— 中断事件冒泡链阻止页面其他监听器包括 B 站原生快捷键监听收到这次按键e.preventDefault()—— 阻止浏览器对该按键的默认行为。这一组合正是屏蔽原生快捷键的完整机制绑定无动作的按键被脚本在捕获阶段消费掉B 站原有的快捷键逻辑自然不会再触发。为什么需要它脚本快捷键与 B 站原生快捷键互不影响「快捷键扩展」组件修改某动作的按键并不会覆盖 B 站自带的快捷键——两者是独立的监听体系。官方帮助文档 help.md 对此有明确说明b 站自带有一些快捷键, 修改本组件提供的相同动作快捷键不会影响 b 站自带的快捷键, 如果希望屏蔽掉 b 站自带的快捷键, 可以安装快捷键扩展 - 无动作插件, 并将无动作绑定到希望屏蔽的快捷键上. 例如希望用C键投币且不希望自带的W键触发投币, 则应该在组件里配置投币为c, 无动作为w.这意味着无动作插件的典型应用场景是按键冲突治理——当用户希望把某个按键改作他用如用C投币但 B 站原生仍用该键如W全屏时把原生按键绑定到无动作即可彻底消除冲突而不是去修改 B 站自身的快捷键。实战示例屏蔽 B 站自带的W全屏键以官方文档给出的投币场景为例完整操作如下启用「快捷键扩展」组件与「快捷键扩展 - 无动作」插件打开快捷键设置可在脚本设置面板或启动栏中搜索快捷键扩展设置进入见 index.ts 中通过launchBar.actions注册的打开入口在投币动作的自定义按键栏填入c在无动作动作的自定义按键栏填入w之后按下C触发脚本的投币动作按下W则被无动作消费B 站自带的全屏/投币等行为不再发生。底层数据流动作与按键如何合并生效要深入理解该插件在整个快捷键体系中的位置需要了解「快捷键扩展」组件的数据组织方式动作注册内置动作在 registry/lib/components/utils/keymap/actions.ts 中定义全屏、宽屏、音量、跳转、投币、收藏、点赞、弹幕开关、进度跳转等最终通过registerAndGetData(keymap.actions, builtInActions)汇总所有插件注册的动作见 actions.ts。按键注册presetBase记录每个动作的默认按键如fullscreen: f、like: l、sendComment: ctrl enterbuiltInPresets提供 Default / YouTube / HTML5Player / PotPlayer 等预设见 presets.ts。最终合并组件在 index.ts 中按优先级合并按键——{ ...presetBase, ...preset, ...customKeyBindings }即默认按键 预设按键 自定义按键合并结果解析为KeyBinding[]后交给loadKeyBindings挂载全局keydown监听含 Shadow DOM 监听见 bindings.ts。「无动作」插件正是通过这两个数据槽keymap.actions与keymap.presets无缝接入上述体系的presetBase.empty 保证它在默认情况下不占用任何按键用户只需在设置界面为它指定要屏蔽的键即可。扩展性提示插件如何新增动作「无动作」插件本身也是如何扩展快捷键体系的一个绝佳范例。任何插件都可以仿照它通过keymap.actions添加新动作、通过keymap.presets添加默认按键。官方文档 help.md 给出的自定义动作模板如下addData(keymap.actions, (actions: Recordstring, KeyBindingAction) { actions.watchlater { displayName: 稍后再看, run: context { const { clickElement } context return clickElement(...选择器..., context) }, } }) addData(keymap.presets, (presetBase: Recordstring, string) { presetBase.watchlater shift w })动作的run返回值约定为true表示完成动作并应阻止其他事件返回空值表示当前场景不适用、应继续执行原有事件help.md。相比之下「无动作」通过prevent: truerun: none让动作不做事但必拦截这正是它与其他动作在语义上的本质区别。小结「无动作」插件以最少的代码仅注册一个动作与一个空按键实现了屏蔽 B 站原生快捷键的能力其核心是KeyBindingAction.prevent字段配合空运行函数在快捷键分发处触发stopImmediatePropagation与preventDefault使用时需同时启用「快捷键扩展」组件并在设置界面为无动作指定欲屏蔽的按键该插件同时是理解 Bilibili-Evolved 插件数据槽keymap.actions/keymap.presets扩展机制的最佳入门示例。【免费下载链接】Bilibili-Evolved强大的哔哩哔哩增强脚本项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门