文章

【前端】link-jump:一个纯静态的长短链跳转工具

自己写的一个网页跳转中转页:长链接、短链接都能跳,纯静态无需后端,扔到 GitHub Pages 就能用。

【前端】link-jump:一个纯静态的长短链跳转工具

平时在博客和群里发外链的时候,一直想要一个「中转页」:先停几秒,告诉对方要跳到哪里去,再自动跳走。既显得不那么生硬,也能顺手提醒一句「注意辨别网址」。

市面上的短链服务要么要注册、要么要服务器,于是干脆自己撸了一个 —— link-jump,纯 HTML + CSS + JS,零依赖、零后端,推到 GitHub Pages 就能跑 (・ω・)✎

它能干什么

一句话:根据 URL 参数判断是长链还是短链,倒计时结束后自动跳转。

模式访问方式行为
长链接index.html?t=https://example.com5 秒倒计时 + 强制风险提示
短链接index.html?s=example读取 ls/example.json,3 秒倒计时跳转
非法参数其它跳到 404 沙漠彩蛋页

长链模式适合临时分享一个完整网址,短链模式适合把常用的几个地址固定下来,比如把自己的主页、图床、网盘做成好记的短码。

怎么用

新增一个短链

不用动任何源码,在 ls/ 目录下新建一个 识别码.json 就行,识别码就是 ?s= 后面跟的那串字符:

1
2
3
4
{
  "name": "站点展示名称",
  "link": "https://目标链接"
}

比如新建 ls/blog.json,之后访问 index.html?s=blog 就会跳到你填的地址。

长链接的注意事项

长链是整条 URL 直接拼在 ?t= 后面的,所以如果目标地址里带 ?&# 这类字符,记得先做一次 URL 编码,否则会被当成参数截断:

1
2
3
4
5
# 原始链接
https://example.com/search?q=abc&from=blog

# 编码后
index.html?t=https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dabc%26from%3Dblog

随手用浏览器控制台敲一句 encodeURIComponent(url) 就能拿到。

部署

GitHub Pages 三步搞定:

  1. Fork 或克隆本仓库
  2. 仓库 SettingsPagesSource 选择 main 分支根目录
  3. 访问 https://<用户名>.github.io/<仓库名>/

想用 Vercel / Netlify 也行,导入仓库直接部署,不需要任何额外配置。

几个小细节

做的时候塞了点自己喜欢的玩意:

  • 自动主题:按本地时间 19:00–07:00 自动切深色,其它时间浅色,不用点按钮
  • DNS 预解析:动态插入 dns-prefetch 标签提前解析目标域名,3 秒超时自动销毁,跳转能快一点
  • 加载动画:短链读配置的时候有 CSS 转圈动画 + 文字提示,不会白屏干等
  • 404 彩蛋:沙漠主题的沉浸式页面,停留超过 60 秒文案会变,每次随机从 wordbank.json 里抽提示词

倒计时时长、预解析超时、预解析域名这些都可以改,全在 assets/js/main.js 顶部:

1
2
3
4
var LONG_DELAY = 5;        // 长链倒计时(秒)
var SHORT_DELAY = 3;       // 短链倒计时(秒)
var PREFETCH_TIMEOUT = 3000;  // DNS 预解析超时(毫秒)
var PREFETCH_HOSTS = [ 'gcore.jsdelivr.net' ];

已知的坑

老实说,这项目目前还有几个硬伤,用之前最好心里有数:

  • 纯静态方案做不了路径美化,短链只能是 ?s=code 这种查询参数形式,/s/code 那种短地址实现不了
  • 长链模式没有做域名白名单 / 黑名单,理论上存在开放重定向的风险,公共部署的话建议自己加一层过滤
  • 短链靠手动维护 JSON 文件,量大了会比较麻烦,没有后台管理界面

前两条算是架构上的取舍:不要后端,就得接受这些。第三条……等哪天真的用不过来了再说吧 😂

相关链接

有问题或者想法欢迎提 Issue,也欢迎顺手点个 Star ⭐

本文由作者按照 CC BY 4.0 进行授权