Firefox打开选课系统无限刷新?
用 Firefox 打开南信大选课系统(xsxk.nuist.edu.cn),页面一直转圈、无限刷新,Chrome 却一切正常——不是你网不好,是站点故意不让 Firefox 进。
现象
打开 xsxk.nuist.edu.cn,Firefox 里常见无限在首页刷新的情况,账号都登不进去
同一网络,换 Chrome 就没事。
成因
站点前端有一份浏览器检测脚本:
/xsxk/profile/browerTips/browerTips.js
(文件名里的 brower 不是笔误,源站就是这么拼的。)
它会读浏览器 UA,发现你是 Firefox、Edge 等「不在白名单」的浏览器,就跳到 tips 页(browerTips.html 一类路径)。
坑在第二步:tips 页并没有好好待着,它会直接 302 回首页。
首页再跑检测 → 再踢去 tips → tips 再 302 回来……
于是你看到的就是:无限刷新。
流程图大概是这样:
打开首页
→ browerTips.js 发现不是 Chrome
→ 跳转 browerTips.html
→ 302 回首页
→ ……循环
为什么不直接拦那个 JS?
第一反应往往是:油猴直接拦截 / 干掉 browerTips.js 不就完了?
试过就知道,事情没那么干净。
检测脚本不只是负责「踢人」,还和页面其它逻辑共享状态——例如后续渲染会依赖类似 browserTypeFlag 的标记。
你把检测脚本整段干掉,首页其它 JS 可能就不知道自己该按哪种浏览器路径渲染,页面卡半截、样式错乱、功能缺失,比刷新更烦。
所以更稳的做法不是「拆检测」,而是 让检测以为你是 Chrome。
做法:伪装 Chrome UA
现代 Firefox 在标准 Web API 上已经和 Chrome 高度兼容,选课系统这种偏传统的教务前端,真正卡人的往往不是「Firefox 渲染不了」,而是 UA 字符串过不了那道 if。
于是脚本只做一件事:在页面脚本跑起来之前(document-start),把 navigator.userAgent 改成一份标准 Chrome UA。
检测通过,tips 不触发,刷新环自然断掉;其它依赖浏览器类型标记的逻辑也能按 Chrome 路径正常走。
脚本
一键安装(推荐): 浏览器已装 Tampermonkey 等油猴插件时,点下面 raw 链接即可:
脚本本体如下(就这么短):
// ==UserScript==
// @name NUIST 选课系统 Firefox 兼容
// @name:en NUIST Course Selection Firefox Fix
// @namespace https://github.com/airline233/nuist-xsxk-ff
// @version 1.0.0
// @description 伪装 Chrome User-Agent,让 Firefox 能正常打开南信大选课系统,避免浏览器检测导致的无限刷新
// @description:en Spoof Chrome User-Agent so Firefox can use NUIST course selection without endless refresh
// @author airline233
// @homepage https://github.com/airline233/nuist-xsxk-ff
// @supportURL https://github.com/airline233/nuist-xsxk-ff/issues
// @match *://xsxk.nuist.edu.cn/*
// @run-at document-start
// @grant none
// @license MIT
// ==/UserScript==
(function () {
'use strict';
// 伪装 UserAgent 为标准 Chrome,绕过 xsxk.nuist.edu.cn 的浏览器限制
const fakeUA =
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';
Object.defineProperty(navigator, 'userAgent', {
get: function () {
return fakeUA;
},
});
})();
安装步骤
- Firefox 安装 Tampermonkey
- 打开上面的 raw 链接,扩展会弹出安装确认
- 访问选课系统,确认脚本在该域名下已启用
- 硬刷新一次(
Ctrl+F5)
写在后面
这事本质上是站点用「只认 Chrome」的粗暴检测,叠了一个会 302 回首页的 tips 页,把兼容问题做成了死循环。
脚本不碰登录、不碰选课接口,只改本地 UA 表现,方便 Firefox 用户正常进系统。
学校前端若以后改检测逻辑,脚本可能失效,到时候再看仓库更新即可。
选课已经够累了,至少别再被自己的浏览器刷新整崩溃。
p.s. 问题是人工F12排的,脚本是gemini写的,文章是grok写的,怎么有种gpt风…