JavaScript按键触发esp函数失效问题求助
解决Q键触发ESP函数无效的问题
让我们一步步排查并修复你的问题:
问题1:事件监听的第三个参数非法
你在addEventListener里传的第三个参数是750,这不符合API规范——这个参数只能是布尔值(表示是否使用捕获模式)或者配置对象。非法参数会导致浏览器无法正确注册事件监听器,这很可能是按键没反应的核心原因。
问题2:ESP函数的重复执行风险
你的esp()函数内部是一个立即执行函数(IIFE),每次调用esp()都会重新修改TextDecoder.prototype.decode。如果多次按Q键,会重复覆盖这个方法,可能导致逻辑冲突或失效。我们可以加一个标志位,确保初始化只执行一次。
修复后的完整代码
// 新增标志位,防止重复初始化 let espInitialized = false; function esp() { if (espInitialized) return; espInitialized = true; (function() { let initialize = function(data) { let regex = /if\(!\w+\['(\w+)']\)continue/; let result = regex.exec(data); if (result) { const inView = result[1]; const push = Array.prototype.push; Array.prototype.push = function(...args) { push.apply(this, args); if (args[0] instanceof Object && args[0].isPlayer) { Object.defineProperty(args[0], inView, {value: true, configurable: false}); } } } } const decode = window.TextDecoder.prototype.decode; window.TextDecoder.prototype.decode = function(...args) { let data = decode.apply(this, args); if (data.length > 1050000) { //1050000 ideal val console.log(data); initialize(data); } return data; } })(); } // 修复事件监听的第三个参数,改为合法的配置对象 window.addEventListener('keydown', (event) => { if (document.activeElement !== document.body) return; var char = event.key.toUpperCase(); switch (char) { case 'Q': esp(); break; } }, { passive: true }); // 这里替换为合法参数
额外说明
- 标志位
espInitialized确保esp()逻辑只执行一次,避免重复修改原生方法导致的问题。如果需要支持重新触发ESP逻辑,可以添加重置标志位的逻辑(比如绑定另一个按键来设置espInitialized = false)。 - 测试时记得先点击页面空白处,让body处于焦点状态——你的代码里已经做了这个判断,这部分逻辑是正确的。
内容的提问来源于stack exchange,提问作者YounginWood
相关产品推荐
相关产品推荐

