如何在Firefox的不存在页面(默认错误页)运行Tampermonkey脚本?
在Firefox默认错误页运行Tampermonkey脚本的解决方案
Firefox的“页面未找到”错误页本质是内置的about:neterror页面,地址栏显示的是你输入的域名,但实际页面的真实URL属于about协议——这就是你之前脚本无法触发的核心原因:Tampermonkey是根据页面真实URL匹配注入,而非地址栏显示的内容。
以下是可行的实现方案:
1. 调整脚本的匹配规则与注入时机
在脚本元数据中,将@match改为匹配Firefox错误页的真实URL模式,并设置更早的注入时机:
// ==UserScript== // @name 目标错误页脚本 // @namespace tampermonkey-scripts // @version 0.1 // @match about:neterror* // @run-at document-start // ==/UserScript==
@match about:neterror*:确保脚本会注入到所有Firefox网络错误页@run-at document-start:让脚本在页面开始加载时就注入,避免错过错误页的渲染时机
2. 过滤目标域名
为了避免脚本在所有错误页运行,需要从错误页的URL参数中提取原始请求的域名,仅在目标域名的错误页执行逻辑:
(function() { 'use strict'; // 从错误页URL参数中获取原始请求的完整地址 const getOriginalRequestUrl = () => { const urlParams = new URLSearchParams(window.location.search); return urlParams.get('u'); }; const originalUrl = getOriginalRequestUrl(); if (!originalUrl) return; // 定义你需要匹配的目标域名列表 const targetDomains = ['not.existing.yahoo.com']; const urlObj = new URL(originalUrl); // 仅在目标域名的错误页执行后续逻辑 if (!targetDomains.includes(urlObj.hostname)) return; // 你的初始化函数 async function init() { console.log("TEST: 脚本已在目标错误页运行"); // 这里添加你的自定义逻辑,比如修改错误页内容、添加交互等 } // 轮询等待错误页DOM加载完成后执行初始化 const waitForDOM = setInterval(() => { if (document.body) { clearInterval(waitForDOM); init(); } }, 100); })();
关键说明
- Firefox错误页的
uURL参数存储了原始请求的完整地址,通过它可以精准过滤目标域名 - 错误页的加载逻辑和普通网页不同,无需依赖
window.load事件,轮询DOM的方式更可靠
内容的提问来源于stack exchange,提问作者HeartOfGermany
相关产品推荐
相关产品推荐

