一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

米侠浏览器脚本中@run-at参数失效该如何调整

时间:2026-06-17 10:27:47 编辑:袖梨 来源:一聚教程网

@run-at参数失效会导致DOM元素找不到、按钮不出现、功能静默失败,根本原因是脚本在目标节点未渲染时执行;需检查元数据中是否声明该参数、文件是否有BOM头,并仅使用document-end/document-start/context-menu三种米侠支持的值。

米侠浏览器脚本中@run-at参数失效会导致DOM元素找不到、按钮不出现、功能静默失败,根本原因是脚本在目标节点尚未渲染时就执行完毕,而米侠对注入时机的解析比Chrome更严格,原生支持有限,必须手动适配。

确认当前@run-at是否被识别

打开脚本编辑界面,定位到元数据块(// ==UserScript== 和 ==/UserScript== 之间),查找是否存在 @run-at 行。若整段注释里完全没出现这个词,说明该参数根本未声明,脚本将回退到米侠默认时机——通常是 document-start,但实际行为不稳定,【这一步必须先做,否则调错方向】

用记事本类纯文本工具打开.js文件,检查文件开头是否有不可见BOM头:若有EF BB BF字节,@run-at会被解析器截断或跳过,直接导致参数失效。

替换为米侠明确支持的时机值

米侠浏览器仅稳定识别以下三种 @run-at 值,其他如 document-idle、document-ready 等均不生效:

方法一:@run-at document-end
适用于绝大多数操作DOM的脚本,等整个HTML解析完成后再执行,能确保 body 存在且大部分静态节点已挂载。但对Vue/React动态生成的内容仍可能错过,需配合 MutationObserver 补充监听。

方法二:@run-at document-start
仅适用于需要劫持原生API(如重写 fetch、XMLHttpRequest)或注入全局变量的脚本。此时 document.documentElement 仅刚创建,DOM树为空,【误用于DOM操作将100%返回null】

方法三:@run-at context-menu
极少数场景可用——当脚本需响应右键菜单触发,且不依赖页面初始结构时。该时机在用户右键后才执行,与页面加载无关,但米侠对该值的支持存在版本差异,v5.5.4+才稳定可用。

验证时机是否真正生效

第一步:在脚本开头插入调试语句
在 return 或主逻辑前加一行 console.log('run-at:', document.readyState, 'time:', Date.now());,保存后刷新目标网页。

第二步:打开开发者工具(地址栏输入 miaoxia://devtools),切换到 Console 标签页,观察输出时间戳和 readyState 值:
若看到 document-end 对应 readyState = 'complete' 且时间戳晚于页面DOMContentLoaded事件,则时机正确;
若 readyState = 'loading' 或时间戳早于页面首屏渲染,则仍处于 document-start 阶段,需检查参数拼写是否全小写、有无多余空格、是否被BOM干扰。

第三步:强制等待并重试
若 document-end 仍找不到目标元素,临时改用 setTimeout(() => { /*你的代码*/ }, 1000),确认是否为框架异步渲染问题——如果是,必须放弃纯 @run-at 调整,改用 waitForElement 或监听 DOM 变化。

热门栏目