如何实现浏览器扩展自动重定向NSFW等特定网址到指定链接
NSFW站点跳转彩蛋实现方案
核心逻辑拆成「NSFW站点识别」和「拦截重定向」两部分,基于Chromium系/Firefox通用的WebExtension标准API实现即可,优先选Manifest V3框架开发,兼容目前所有主流浏览器新版本。
1. 扩展基础权限配置
先在manifest.json里配好必要权限,别申请多余权限避免被浏览器商店下架:
- 必选
declarativeNetRequest权限:这是MV3里性能最好的请求拦截API,在页面发起请求阶段就可以触发重定向,不会出现原页面闪一下再跳的问题,比老版webRequest更省资源 - 必选主机权限:配置
<all_urls>匹配范围,才能覆盖所有用户访问的站点 - 可选
storage权限:用来存用户自定义白名单、功能开关状态
基础配置示例:
{ "manifest_version": 3, "name": "Sam的健康上网提醒", "version": "1.0", "permissions": ["declarativeNetRequest", "storage"], "host_permissions": ["<all_urls>"], "background": { "service_worker": "background.js" } }
2. NSFW站点识别方案
按实现成本从低到高选择,推荐前两种组合使用,准确率足够还不侵犯用户隐私:
- 本地域名黑名单匹配:直接把开源社区维护的NSFW域名列表打包进扩展本地存储,不用发起外部请求,匹配速度极快,隐私性好;缺点是新出现的站点可能漏判,每次扩展更新的时候同步更新黑名单即可
- 页面特征补判:对不在黑名单里的站点,注入轻量内容脚本,扫描页面meta标签(比如很多成人站会带
rating=adult的meta标记)、成人关键词密度、首屏违规内容占比,命中预设阈值就判定为NSFW站点,能覆盖大部分黑名单没收录的新站 - 进阶AI识别:如果要更高准确率,可以打包TensorFlow.js的轻量NSFW图片分类模型到本地,识别页面首屏图片内容,缺点是扩展包体积会增加几MB,纯彩蛋功能没必要上这么重的逻辑
注意:不要调用第三方在线NSFW检测接口,会泄露用户全部浏览记录,既违反隐私规范,也容易拖慢页面加载速度
3. 重定向逻辑实现
优先用declarativeNetRequest做拦截,体验最流畅:
- 规则只匹配
main_frame类型的请求,也就是只拦截主页面导航,别误拦页面里的图片、脚本、接口请求 - 把识别到的NSFW域名批量加到规则的匹配域里,触发动作直接配置为重定向到你准备的Jetstream Sam梗图地址
- 加个功能总开关,默认可以开启,但要让用户能随时关掉;同时加本地白名单,用户标记为误判的站点永久跳过拦截
后台Service Worker里的规则配置示例:
// 从本地存储拉取NSFW域名列表、白名单列表 async function updateRedirectRule() { const { nsfwDomains = [], whiteList = [] } = await chrome.storage.local.get(["nsfwDomains", "whiteList"]); const matchDomains = nsfwDomains.filter(domain => !whiteList.includes(domain)); const rule = { id: 1001, priority: 1, action: { type: "redirect", redirect: { url: "你准备的Jetstream Sam梗图本地/直链地址" } }, condition: { requestDomains: matchDomains, resourceTypes: ["main_frame"] } }; await chrome.declarativeNetRequest.updateDynamicRules({ removeRuleIds: [1001], addRules: matchDomains.length ? [rule] : [] }); } // 扩展启动、存储配置更新的时候刷新规则 chrome.runtime.onInstalled.addListener(updateRedirectRule); chrome.storage.onChanged.addListener(updateRedirectRule);
如果需要配合内容脚本的页面特征判定逻辑,可以在内容脚本确认站点为NSFW后,给后台发消息,临时把该域名加入重定向规则;或者直接调用chrome.tabs.update跳转到梗图页面,后者会有微小的原页面闪烁,体验稍差。
4. 体验优化小细节
- 加个误判兜底:触发重定向后在梗图页面加个5秒可点击的返回按钮,用户点了就自动把对应域名加入白名单,跳回原页面
- 彩蛋别太生硬,跳转的时候可以加个极短的淡出过渡,想玩梗的话可以默认关闭、让用户手动开启Sam的经典台词音效,避免公共场合社死
- 别做强制无法跳过的跳转,不然用户会直接卸载扩展
内容的提问来源于stack exchange,提问作者Witherbeagle
相关产品推荐
相关产品推荐

