You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Tampermonkey覆盖JavaScript匿名函数内的Zm函数

Tampermonkey 覆盖匿名函数内的Zm函数方案

核心思路

利用Tampermonkey的document-start运行时机,在网站原脚本加载前拦截目标脚本,修改其中Zm函数的代码后再执行,绕开匿名函数的作用域封闭限制。

具体实现步骤

  1. 配置脚本运行时机
    在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==
    
  2. 拦截并修改目标脚本
    通过监听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);
    })();
    
  3. 压缩代码适配
    如果网站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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 11:26:23