需通过文件名前缀、@run-at声明和分阶段扫描三者协同控制执行顺序:用01_、02_等ascii升序命名强制加载次序;前置脚本设@run-at document-start,后置脚本设document-idle并监听load事件;最后以分阶段扫描+实测验证顺序。

你想让多个油猴脚本按特定顺序执行,比如先运行去广告脚本再运行自动签到脚本,但米侠浏览器暴力猴界面里只显示开关和启用状态,没有拖拽排序或优先级设置入口——这不是功能缺失,而是米侠把执行顺序控制权交给了脚本元数据和底层加载机制,必须通过修改@run-at声明、调整文件名排序或手动干预扫描顺序来实现。
确认暴力猴已启用并完成脚本重载
暴力猴面板中脚本列表的显示顺序≠实际执行顺序,所有脚本默认按文件系统读取顺序加载,而暴力猴自身若未完成完整初始化,后续任何排序操作都无效。点击暴力猴图标 → 左上角菜单 → “设置” → “通用” → 确保【启用脚本】为开启状态;返回主界面 → 左上角菜单 → “重新扫描脚本” → 等待右下角提示“扫描完成,共发现 X 个脚本”后再进行下一步。
若扫描后某脚本仍灰显不可点,说明其元数据块缺失 @grant 或 @match 声明,暴力猴拒绝加载,必须先补全基础字段才能参与排序流程。
通过文件名前缀强制控制加载顺序
米侠暴力猴在扫描 scripts/ 目录时,按文件名 ASCII 码升序读取,因此可利用数字前缀人为干预加载次序。将需优先执行的脚本重命名为 【01_adblock.user.js】,次要脚本命名为 【02_signin.user.js】,最后执行的命名为 【03_translate.user.js】。注意:后缀必须严格为 .user.js,且文件保存为 UTF-8 无 BOM 编码。
这一步操作起来很简单,直接在文件管理器中重命名即可。但切记不能用中文数字(如“一_”、“二_”),ASCII 排序下中文字符会排在所有英文和数字之后,导致实际加载顺序完全颠倒。
调整脚本注入时机实现逻辑先后
当两个脚本作用于同一页面且存在依赖关系(例如A脚本生成DOM节点,B脚本需操作该节点),仅靠文件名排序不够可靠,必须精确控制执行时机。打开暴力猴中目标脚本 → 点击“编辑” → 在元数据块中修改 @run-at 声明:
方法一:让前置脚本尽早介入 → 将其 @run-at 设为 document-start,确保在 DOM 构建初期即注入逻辑;
方法二:让后置脚本等待就绪 → 将其 @run-at 设为 document-idle,并在代码开头添加 window.addEventListener('load', () => { ... }, { once: true }),避免因 DOM 加载延迟导致节点找不到;
方法三:强制同步等待 → 若前置脚本需异步加载资源(如远程配置),后置脚本应在代码中插入 while (!window.__adblock_ready) { sleep(50); }(需前置脚本在全局挂载标识)。
⚠️注意:@run-at 不支持 custom 值,写成 @run-at document-custom 会导致整个脚本被暴力猴跳过加载,不会报错也不会提示。
手动触发分阶段扫描以验证顺序
第一步:关闭暴力猴面板,清空 scripts/ 目录,仅放入 【01_init.user.js】;
第二步:重启浏览器 → 打开暴力猴 → “重新扫描脚本” → 确认该脚本已启用并正常运行;
第三步:不关闭面板,将 【02_dependent.user.js】 拖入 scripts/ 目录 → 再次点击“重新扫描脚本”;
第四步:刷新目标网页,观察控制台日志或页面行为,确认 02 脚本是否在 01 完成后才开始执行。
这一步是唯一能真实验证执行顺序是否生效的操作,仅看文件名或元数据无法替代实测。若 02 仍早于 01 触发,说明其 @match 规则匹配了更早加载的页面(如重定向页),需检查 URL 匹配精度。











