
本文介绍如何改造基础 tampermonkey 脚本,使其支持同时检测多个关键词:若任一词存在则弹窗提示并可扩展通知;若全部缺失则自动刷新页面。代码简洁可靠,兼容主流浏览器。
本文介绍如何改造基础 tampermonkey 脚本,使其支持同时检测多个关键词:若任一词存在则弹窗提示并可扩展通知;若全部缺失则自动刷新页面。代码简洁可靠,兼容主流浏览器。
在实际网页监控场景中(例如抢购商品、监测公告更新或跟踪特定信息),仅检测单个关键词往往不够灵活。下面提供一个专业、可维护的多关键词检测方案,基于原脚本升级而来,兼顾功能性、可读性与可扩展性。
✅ 核心逻辑说明
脚本在页面加载完成后,提取整个
的纯文本内容,遍历预设关键词数组。一旦发现任意一个关键词,即标记为“命中”,立即终止循环(避免冗余匹配),并触发用户提示;若遍历完毕仍未匹配,则执行页面刷新。? 完整优化脚本(含注释)
// ==UserScript==
// @name Multi-Keyword Detector
// @namespace http://tampermonkey.net/
// @version 1.2
// @description Detect any of multiple keywords; alert on match, reload on none
// @author You
// @match *://*/*
// @grant none
// ==/UserScript==
window.addEventListener('load', function() {
console.log("Page loaded. Starting keyword detection...");
// ? 自定义关键词列表(支持中英文、符号、空格等任意文本)
const keywords = ["cheese", "mushroom", "vegan option"];
// ? 提取页面可见文本(兼容 textContent 和 innerText)
const content = document.body.textContent?.trim() || document.body.innerText?.trim() || "";
// ? 检查是否至少匹配一个关键词(大小写敏感)
const found = keywords.some(keyword => content.includes(keyword));
if (found) {
console.log(`✅ Matched at least one keyword: ${keywords.filter(k => content.includes(k)).join(', ')}`);
alert(`? Found! At least one of these is present:\n${keywords.join(', ')}`);
// ? 扩展建议:此处可添加 Webhook 推送、桌面通知或 localStorage 记录
// Example: navigator.permissions.query({name: 'notifications'}).then(...);
} else {
console.log(`❌ None of [${keywords.join(', ')}] found — reloading page.`);
window.location.reload();
}
});
⚠️ 注意事项与最佳实践
- 大小写敏感:includes() 默认区分大小写。如需忽略大小写,可改为 content.toLowerCase().includes(keyword.toLowerCase());
- 性能优化:对超长页面(如百万字文档),建议限制检测范围(如只扫描 #main-content 或 .article-body);
- 防重复执行:若页面含动态加载内容(如 SPA),需结合 MutationObserver 监听 DOM 变化,而非仅依赖 load 事件;
- 用户体验:频繁弹窗可能干扰操作,生产环境推荐替换 alert() 为非阻塞式通知(如 browser.notifications API 或自定义 toast);
- 安全提示:@match *://*/* 权限较宽泛,请根据实际需求精确限定域名(如 @match https://example.com/*)。
通过以上改造,你不仅实现了多关键词检测的核心需求,还获得了清晰的调试日志、良好的可维护性和面向未来的扩展接口。只需修改 keywords 数组,即可秒级适配新监控场景。










