如何用Tampermonkey覆盖JavaScript匿名函数内的Zm函数
Tampermonkey 覆盖匿名函数内的Zm函数方案
核心思路
利用Tampermonkey的document-start运行时机,在网站原脚本加载前拦截目标脚本,修改其中Zm函数的代码后再执行,绕开匿名函数的作用域封闭限制。
具体实现步骤
配置脚本运行时机
在Tampermonkey脚本开头的元信息中,必须设置@run-at document-start,确保你的脚本优先于网站所有JS执行:// ==UserScript== // @name 自定义Zm函数 // @namespace http://tampermonkey.net/ // @version 0.1 // @description 修改Zm函数内的指定内容 // @author 你的名字 // @match https://目标网站域名/* // @run-at document-start // @grant none // ==/UserScript==拦截并修改目标脚本
通过监听beforescriptexecute事件,定位包含Zm函数的脚本,阻止原脚本执行,修改代码后重新注入:(function() { document.addEventListener('beforescriptexecute', function(e) { const targetScript = e.target; // 筛选包含Zm函数和目标标记的脚本(如果代码压缩过,替换为混淆后的关键字) if (targetScript.textContent.includes('Zm') && targetScript.textContent.includes('Change me.')) { e.preventDefault(); // 阻止原脚本运行 // 替换Zm函数内的目标内容 let modifiedCode = targetScript.textContent.replace(/Change me\./g, '你的自定义内容'); // 若网站禁止eval,用script标签注入修改后的代码 const newScript = document.createElement('script'); newScript.textContent = modifiedCode; document.head.appendChild(newScript); } }, true); })();压缩代码适配
如果网站JS是压缩混淆后的,先在浏览器控制台找到Zm函数的实际代码,定位混淆后的"Change me."对应字符串(比如可能变成a="xxx"),再替换正则里的匹配内容。
替代方案(更精准定位Zm)
如果能确定Zm函数的定义结构,比如是var Zm = function(){...},可以直接替换整个函数体:
// 替换上面的modifiedCode部分 modifiedCode = targetScript.textContent.replace( /var Zm\s*=\s*function\([^)]*\)\s*{[^}]*}/, 'var Zm = function() { /* 你的完整自定义函数代码 */ }' );
内容的提问来源于stack exchange,提问作者ZeroPhase
相关产品推荐
相关产品推荐

