Electron中绕过navigator.getGamepads交互要求的方案问询
解决Electron启动时直接获取Gamepad状态的问题
核心方案:添加Chromium命令行开关绕过用户交互限制
Chromium(Electron基于它)的Gamepad API用户交互限制可以通过命令行开关直接禁用,完全不需要修改硬件或做模拟交互的粗糙操作。在你的Electron主进程初始化阶段添加以下配置:
const { app } = require('electron'); // 禁用Gamepad API的用户交互强制要求 app.commandLine.appendSwitch('disable-features', 'GamepadUserInteractionRequired'); app.whenReady().then(() => { // 初始化窗口等应用逻辑 });
如果上述开关在你的Electron版本中不生效,可以尝试另一个旧版兼容的开关:
app.commandLine.appendSwitch('enable-gamepad-no-user-gesture-required');
为什么这个方案可行?
这个开关直接关闭了Chromium为Gamepad API设置的安全校验——因为你的场景是完全可控的(自己掌控电脑、应用和摇杆),所以完全不需要顾虑原本的安全风险。应用启动后就能直接调用navigator.getGamepads()获取所有已连接的手柄状态,包括按钮和旋钮的实时数据。
备选方案:直接通过Node.js访问USB/HID硬件
如果出于某些原因命令行开关无法使用,你可以在Electron主进程中使用Node.js的USB/HID库(比如usb或node-hid)直接读取摇杆的硬件数据。这种方式完全绕过了浏览器的Gamepad API,需要你根据自定义摇杆的通信协议来解析数据,但因为你能掌控摇杆的编程,适配成本会很低。
内容的提问来源于stack exchange,提问作者Joe Jankowiak
相关产品推荐
相关产品推荐

