脱裤子放屁 - 你们讨厌这样的页面吗?

前言

平时在逛掘金和少数派等网站的时候,经常有跳转外链的场景,此时基本都会被中转到一个官方提供的提示页面。

掘金:

知乎:

少数派:

这种官方脱裤子放屁的行为实在令人恼火。是、是、是、我当然知道这么做有很多冠冕堂皇的理由,比如:

  • 防止钓鱼攻击
  • 增强用户意识
  • 品牌保护
  • 遵守法律法规
  • 控制流量去向

(以上5点是 AI 告诉我的理由)

但是作为混迹多年的互联网用户,什么链接可以点,什么最好不要点(悄悄的点) 我还是具备判断能力的。

互联网的本质就是自由穿梭,一个 A 标签就可以让你在整个互联网翱翔,现在你每次起飞的时候都被摁住强迫你阅读一次免责声明,多少是有点恼火的。

解决方案

这些中转站的实现逻辑基本都是将目标地址挂在中转地址的target参数后面,在中转站做免责声明,然后点击继续跳转才跳到目标网站。

掘金:

https://link.juejin.cn/?target=https%3A%2F%2Fdeveloper.apple.com%2Fcn%2Fdesign%2Fhuman-interface-guidelines%2Fapp-icons%23macOS/

少数派:https://sspai.com/link?target=https%3A%2F%2Fgeoguess.games%2F

知乎:https://link.zhihu.com/?target=https%3A//asciidoctor.org/

所以我们就可以写一个浏览器插件,在这些网站中,找出命中外链的 A 标签,替换掉它的href属性(只保留 target 后面的真实目标地址)。

核心函数:

js

体验AI代码助手

代码解读

复制代码

function findByTarget() { if (!hostnames.includes(location.hostname)) return; const linkKeyword = "?target="; const aLinks = document.querySelectorAll( `a[href*="${linkKeyword}"]:not([data-redirect-skipper])` ); if (!aLinks) return; aLinks.forEach((a) => { const href = a.href; const targetIndex = href.indexOf(linkKeyword); if (targetIndex !== -1) { const newHref = href.substring(targetIndex + linkKeyword.length); a.href = decodeURIComponent(newHref); a.setAttribute("data-redirect-skipper", "true"); } }); }

为此我创建了一个项目仓库 redirect-skipper ,并且将该浏览器插件发布在谷歌商店了 安装地址 。

安装并启用这个浏览器插件之后,在这些网站中点击外链就不会看到中转页面了,而是直接跳转到目标网站。

因为我目前明确需要修改的就是这几个网站,如果大家愿意使用这个插件,且有其他网站需要添加到替换列表的,可以给 redirect-skipper 仓库 提PR。

如果需要添加的网站的转换规则是和findByTarget一致的,那么仅需更新sites.json文件即可。

如果需要添加的网站的转换规则是独立的,那么需要更新插件代码,合并之后,由我向谷歌商店发起更新。

为了后期可以灵活更新配置(谷歌商店审核太慢了),我默认将插件应用于所有网站,然后在代码里通过 hostname 来判断是否真的需要执行。

json

体验AI代码助手

代码解读

复制代码

{ "$schema": "https://json.schemastore.org/chrome-manifest.json", "name": "redirect-skipper", "manifest_version": 3, "content_scripts": [ { "matches": ["<all_urls>"], "js": ["./scripts/redirect-skipper.js"], "run_at": "document_end" } ], }

在当前仓库里维护一份sites.json的配置表,格式如下:

json

体验AI代码助手

代码解读

复制代码

{ "description": "远程配置可以开启 Redirect-Skipper 插件的网站 (因为谷歌商店审核太慢了,否则无需通过远程配置,增加复杂性)", "sites": [ { "hostname": "juejin.cn", "title": "掘金" }, { "hostname": "sspai.com", "title": "少数派" }, { "hostname": "www.zhihu.com", "title": "知乎" } ] }

这样插件在拉取到这份数据的时候,就可以根据这边描述的网站配置,决定是否执行具体代码。

插件完整代码:

js

体验AI代码助手

代码解读

复制代码

function replaceALinks() { findByTarget(); } function observerDocument() { const mb = new MutationObserver((mutationsList) => { for (const mutation of mutationsList) { if (mutation.type === "childList") { if (mutation.addedNodes.length) { replaceALinks(); } } } }); mb.observe(document, { childList: true, subtree: true }); } // 监听路由等事件 ["hashchange", "popstate", "load"].forEach((event) => { window.addEventListener(event, async () => { replaceALinks(); if (event === "load") { observerDocument(); await updateHostnames(); replaceALinks(); // 更新完数据后再执行一次 } }); }); let hostnames = ["juejin.cn", "sspai.com", "www.zhihu.com"]; function updateHostnames() { return fetch( "https://raw.githubusercontent.com/dogodo-cc/redirect-skipper/master/sites.json" ) .then((response) => { if (response.ok) { return response.json(); } throw new Error("Network response was not ok"); }) .then((data) => { // 如果拉到了远程数据,就用远程的 hostnames = data.sites.map((site) => { return site.hostname; }); }) .catch((error) => { console.error(error); }); } // 符合 '?target=' 格式的链接 // https://link.juejin.cn/?target=https%3A%2F%2Fdeveloper.apple.com%2Fcn%2Fdesign%2Fhuman-interface-guidelines%2Fapp-icons%23macOS/ // https://sspai.com/link?target=https%3A%2F%2Fgeoguess.games%2F // https://link.zhihu.com/?target=https%3A//asciidoctor.org/ function findByTarget() { if (!hostnames.includes(location.hostname)) return; const linkKeyword = "?target="; const aLinks = document.querySelectorAll( `a[href*="${linkKeyword}"]:not([data-redirect-skipper])` ); if (!aLinks) return; aLinks.forEach((a) => { const href = a.href; const targetIndex = href.indexOf(linkKeyword); if (targetIndex !== -1) { const newHref = href.substring(targetIndex + linkKeyword.length); a.href = decodeURIComponent(newHref); a.setAttribute("data-redirect-skipper", "true"); } }); }

作者:甜甜的泥土
链接:https://juejin.cn/post/7495977411273490447
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1200424.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

京东e卡回收98折平台存在吗,盘点官网回收折扣

大家是否曾在一些地方看到过号称京东e卡能98折回收的宣传?当看到如此高的回收折扣,是不是也曾心动,想着自己手中闲置的京东e卡终于能高价处理了?这些宣传就像一个个充满诱惑的钩子,吸引着有京东e卡回收需求的人。…

2025年网络安全就业前景:零基础拿高薪的黄金赛道!

2025年网络安全就业前景&#xff1a;零基础拿高薪的"黄金赛道"&#xff01; 在数字化浪潮席卷全球的今天&#xff0c;网络安全已成为保护我们数字生活的"隐形长城"。你是否想过&#xff0c;一个不需要高学历门槛、薪资却远超普通白领、且未来十年需求持续…

《信息安全毕业主推的6大岗位(2025真实版)》

《信息安全毕业主推的6大岗位&#xff08;2025真实版&#xff09;》 关于我&#xff1a;资深IT专家&#xff0c;AI布道者&#xff0c;15年实战老兵多本专业图书作者大厂技术面试官。 根据2024年官方公布的数据显示,到2027年我国网络安全人员缺口将达327万。 尽管全国已有626所高…

格力两款制热王者机型深度解析:小户型公寓南方潮湿环境制热空调选购攻略

随着南方冬季湿冷气候日益严峻,传统制热设备在潮湿环境下表现不佳的问题愈发凸显。对于居住在小户型公寓的业主而言,选择一款既能快速制热又适应南方潮湿环境的空调产品,已成为亟待解决的生活刚需。从当前市场趋势来…

都说网安人才缺口大,为什么大家还是找不到工作?

都说网安人才缺口大&#xff0c;为什么大家还是找不到工作&#xff1f; 为什么都说了网络安全的人才缺口巨大&#xff0c;但还是有很多人找不到工作&#xff0c;难道又被专家忽悠了&#xff1f; 壹 高校人才与企业需求不必匹配 首先学校教的专业知识太过基础&#xff0c;企…

Chrome浏览器升级到138后不支持v2版的插件

Chrome浏览器在138版本之后已不再支持v2版本的旧插件,建议尽快将v2插件升级至v3版本以获得更好的兼容性。如果您目前仍需使用v2插件,或需要导出旧插件的数据, 可以按照以下步骤进行临时配置:打开Chrome浏览器,输入…

沈阳高中培训、沈阳高中补习、沈阳高中补习班、沈阳高中补课、沈阳高中补课班、沈阳高中集训、沈阳高二培训、沈阳高二补习选择指南

沈阳诚信高一补课班推荐榜 优质机构盘点一、行业背景与筛选维度据《2026年辽宁省高考文化课辅导行业白皮书》数据显示,辽宁省内高一阶段选择课外辅导的学生占比达62.3%,其中艺考生群体占比超40%。随着高考竞争加剧,…

MySQL迁移:国产替代方案盘点

2024年&#xff0c;信创目录已覆盖超80%央企&#xff0c;国产数据库、Oracle替代方案、信创替换成为企业数字化转型的核心关键词。面对MySQL在高并发场景下的性能瓶颈以及日益严格的安全合规要求&#xff0c;如何选择一条稳定可控、平滑迁移的国产化路径&#xff0c;成为金融、…

和解破冰却难破困局:汇源回A之路仍陷多重迷局

新春消费旺季的钟声渐近,本应全力冲刺市场的国民果汁品牌汇源,却被一场横跨资本与品牌的纷争拖入舆论中心。2026年1月,粤民投与文盛资产的债务和解消息,为停滞已久的汇源回A计划注入一丝曙光,但这场看似打破僵局的资本运作,背后却暗藏商标归属、股权冻结、经营内耗等多重隐忧,让…

对于后端要和linux打交道要掌握的点

管理运行在Linux上的Spring Boot JAR包进程&#xff0c;你需要掌握以下核心命令和技巧&#xff1a; 1. 进程查找命令 查找Spring Boot进程 # 按名称查找 ps aux | grep java ps aux | grep spring ps aux | grep jar# 精确查找jar包进程 ps aux | grep -E \.jar$# 查看指定端…

高集成Mini高速CAN FD系统基础芯片SIT1169Q

在汽车电子与工业自动化领域&#xff0c;CAN总线作为核心通信协议&#xff0c;对其配套芯片的集成度、可靠性与性能提出了严苛要求。芯力特推出的SIT1169Q作为一款Mini高速CAN FD系统基础芯片&#xff08;System Basis Chip, SBC&#xff09;&#xff0c;通过高度集成高速CAN F…

中医执医刷题软件怎么选不踩坑?2026优质清单出炉,备考必看!

中医执医刷题软件怎么选不踩坑?2026优质清单出炉,备考必看!一、备考刚需:刷题软件如何成为通关 “加速器” 中医执业医师资格考试,是众多中医从业者职业生涯中的关键门槛。这场考试的内容极为繁杂,涵盖中医基础理…

黑客常见10大攻击技术,你知道几个?收藏这篇就够了

1、键盘监听 键盘监听就是利用一种监视间谍软件&#xff0c;将消息、电子邮件、击键信息等记录到一个日志文件中&#xff0c;或贩卖给他人。这其中就包含你的密码、社保号、信用卡信息等。 2、Ddos攻击 即利用众多来源的流量&#xff0c;涌入对方在线服务系统使其瘫痪。 黑…

网络安全靶场推荐,通过实战快速提升技能!

前言 自学网络安全知识&#xff0c;具备一定的理论基础&#xff0c;缺乏实战经验&#xff0c;想去网络靶场体验一下&#xff0c;通过实操能快速提升实战技能&#xff01; 可推荐的网络靶场&#xff1a; 1、春秋云境.com&#xff1a;平台涵盖350CVE靶标和10套大型仿真场景&am…

2026年市面上可靠的防爆气动葫芦公司怎么选,1吨气动葫芦/12吨气动葫芦/20吨气动葫芦,防爆气动葫芦订制厂家怎么选购

行业洞察:防爆气动葫芦的采购逻辑与市场格局 在工业4.0与安全生产双重驱动下,防爆气动葫芦作为高危环境(如煤矿、化工、石油)的核心起重设备,其市场需求持续攀升。据统计,2025年国内防爆气动葫芦市场规模已突破1…

【机械振动领域反问题求解】基于伪谱法的一维非理想悬臂梁与固支梁动力学分析研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真…

口碑与质量双优:国内靠谱的步入式环境试验箱生产商推荐

在全球制造业加速向高端化、智能化、绿色化转型的宏观背景下,产品的环境适应性与可靠性已成为衡量其核心竞争力的关键指标。作为模拟各类严苛环境、验证产品耐久性的关键装备,环境试验设备,特别是大型的步入式环境试…

CPU的内核态和用户态

核心概念 内核态 (Kernel Mode) 和 用户态 (User Mode) 是现代操作系统&#xff08;如Windows、Linux、macOS&#xff09;用来实现系统稳定性和安全性的一种硬件机制。它们本质上是CPU运行的两种不同特权级别或执行模式。 您可以把它想象成一个公司的两层结构&#xff1a;用户态…

java synchronized关键字用法和底层原理

一、synchronized 的用法 synchronized 关键字用于实现线程同步&#xff0c;确保多个线程在访问共享资源时不会发生数据竞争和不一致的问题。它主要有三种使用方式&#xff1a; 1. 同步实例方法 public synchronized void method() {// 同步代码 }锁对象是当前实例&#xff08;…

免费查文献的网站有哪些 常用免费学术文献获取平台推荐

做科研的第一道坎&#xff0c;往往不是做实验&#xff0c;也不是写论文&#xff0c;而是——找文献。 很多新手科研小白会陷入一个怪圈&#xff1a;在知网、Google Scholar 上不断换关键词&#xff0c;结果要么信息过载&#xff0c;要么完全抓不到重点。今天分享几个长期使用的…