javascript - Gamepad API 未在 Windows server 2012 上的 Chrome 中检测到 Xbox 控制器
问题描述
我正在尝试使用游戏手柄 API 连接到谷歌浏览器中的 Xbox 控制器。我遇到了一个问题,在插入控制器并按下控制器上的一些按钮后,navigator.GetGamepads() 没有返回其数组中的任何游戏手柄对象,所有值都为空。
这只发生在 Windows Server 2012 上的 Chrome 上。我试过 Firefox 并且可以正常检测到游戏手柄。在 Windows 8.1、Server 2016 和 Windows 10 chrome 上运行可以正常检测到游戏手柄。
我尝试将 Xbox 驱动程序从我的 Windows 8.1 计算机复制到服务器 2012 但 navigator.GetGamepads() 仍然没有返回任何内容。我将 Windows 8.1 Xbox 驱动程序降级为在 Server 2012 上运行的相同驱动程序版本,并且在 Windows 8.1 上一切正常。
查看 chrome://device-log/ 时,我可以看到 360 控制器在插入和拔出时显示为设备,因此 chrome 可以看到它,但由于某种原因似乎没有将其解析为游戏手柄。
关于什么可能导致 navigator.GetGamepads() 仅在 Windows Server 2012 上运行的 chrome 上失败的任何想法?我一直在使用 Chrome 76。
解决方案
在 Windows Server 2012、Windows 8 和更高版本上,Chrome 会查找 xinput1_4.dll。在早期版本中,它会查找 xinput9_1_0.dll。
在此处查看 XInputDllFileName:
https://cs.chromium.org/chromium/src/device/gamepad/gamepad_platform_data_fetcher_win.cc?l=74
推荐阅读
- java - Java Spring 无法使用枚举作为构造函数参数创建 Bean
- html - CSS - Flexbox div 匹配另一个 div 的高度
- r - createDataPartition 不分区数据
- c++ - std::scoped_lock 或 std::unique_lock 或 std::lock_guard?
- java - HsqlException:调用存储过程时出现一般错误
- algorithm - 获胜者火车的算法?
- html - 如何将未排序的列表放在预定义(a px *b px)框的底部?
- angular - Angular HttpClient 取消订阅
- mongodb - Mongo shell 和代码结果返回不同的结果
- matlab - 运行简单场景和传感器模型 3D 仿真时遇到一些问题