吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 606|回复: 6
收起左侧

[其他原创] GitHub HTML 网页浏览

[复制链接]
三滑稽甲苯 发表于 2026-4-27 23:28
本帖最后由 三滑稽甲苯 于 2026-4-27 23:38 编辑

简介

逛 GitHub 时经常会遇到一种情况:仓库里明明放了一个 HTML 页面,但点开 view raw 后浏览器看到的只是源码,没法像网页那样直接预览。

view-blob.png

view-raw.png

为了解决这个问题,我做了一个小工具:GitHub Preview。它不需要克隆仓库,也不需要下载文件,只要给它一个 GitHub 的 rawblob 链接,就可以直接在线预览页面。使用方式也很简单:把链接粘进去,点击 Preview 即可。

landing.png

bootstrap.png

原理

Content-Type

问题的根源其实不复杂:浏览器能不能“把文件当网页渲染”,很大程度上取决于响应头里的 Content-Type。比如一个正常 HTML 文件返回的是:

Content-Type: text/html

这告诉浏览器:你要把这个文件当作 HTML 渲染。但是,GitHub 托管仓库文件的服务器 (raw.githubusercontent.com) 返回的是:

Content-Type: text/plain

这告诉浏览器把它当成纯文本展示,而不是当成网页解析。这就是为什么 raw 链接只能看代码,却不渲染网页。

Service Worker

这个工具的核心是 Service Worker。简单来说,它就相当于一个浏览器层面的 HTTP 代理,可以拦截并处理当前站点下发出的请求。

我把预览地址设计成这样:

https://pro-2684.github.io/GitHub-Preview/owner/repo/ref/path/to/index.html

当浏览器访问这个地址时,Service Worker 会:

  1. 拦截请求
  2. 把路径映射到 raw.githubusercontent.com
  3. 拉取原始文件内容
  4. 按扩展名修正 Content-Type (例如 .html -> text/html, .js -> application/javascript...)
  5. 再把结果返回给浏览器

这样一来,浏览器拿到的就是内容一样,但 Content-Type 被修正的响应,于是 HTML 就能正常渲染了。更重要的是,这种方式不只对首页生效。页面里后续加载的脚本、样式、图片,以及运行时的 fetch / XHR 请求,也会继续经过同一套映射逻辑,因此相对路径资源均能能正常使用。

关键代码

核心逻辑其实很简单,就是把请求转发到 raw.githubusercontent.com,再根据规则修正响应头:

// 请求原文件
const rawUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${rest.join("/")}`;
const res = await fetch(rawUrl);

// 修改响应头
const newHeaders = new Headers(res.headers);
newHeaders.set(
        "Content-Type",
        fixMIME(rest[rest.length - 1], res.headers.get("Content-Type")),
);

// 返回结果
return new Response(res.body, {
        status: res.status,
        statusText: res.statusText,
        headers: newHeaders,
});

其中 fixMIME() 会根据扩展名推断类型,例如:

  • .html -> text/html
  • .js -> application/javascript
  • .css -> text/css
  • .json -> application/json

首页则负责把用户输入的链接统一解析成 raw 格式,再跳转到预览地址。

缺陷

  • 如果网页使用了 /assets/app.css 这种绝对地址,请求会跑到当前预览站点根路径下,从而导致 404。
  • Service Worker 无法拦截浏览器对其它 Service Worker 脚本的请求。因此目标页面如果自己还想注册另一个 Service Worker,就会出现 404 错误。

对比与总结

和现有方案相比,这个项目最大的特点是:完全前端实现,不修改响应内容,不依赖后端代理。

  • raw.githack.com:走服务端代理,效果稳定,但需要后端
  • htmlpreview:主要通过改写 HTML 工作,对动态请求支持有限
  • GitHub Preview:直接在浏览器端用 Service Worker 拦截和转发请求,部署简单,适合静态页面快速预览

链接



免费评分

参与人数 2吾爱币 +7 热心值 +2 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
weidechan + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ITHM 发表于 2026-4-28 09:44
像我这样经常在github找东西的人来说,这个太实用了
wjbedu 发表于 2026-4-28 09:56
天天哈皮 发表于 2026-4-28 09:57
daymissed 发表于 2026-4-28 10:09
谢谢分享,我经常遇到这个问题不知道怎么解决,今天终于可以了.
BreadDog 发表于 2026-4-28 10:13
牛逼的,52里面果然有好东西
wuaipojiedexs 发表于 2026-5-2 13:36
像我这样经常在github找东西的人来说,这个太实用了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-5-3 15:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表