feat(page): 自动刷新拦截改为默认开启(便于查看 err toast)

- 原来默认关闭(需 localStorage.hornetBlockReload=1),游戏一遇到致命错误/断线就 location.reload() 刷页,err toast 一闪即没

- 现改为默认开启:localStorage.hornetBlockReload='0' 才关闭;F5 仍然放行一次

- 同步源文件 tools/split.js 与产物 main.9f4e7a89.js

- 注意:拦截期间游戏无法靠刷页重连,只能反复内部重连(临时排查用)
This commit is contained in:
TermiNexus committed 2026-10-16 14:14:51 +08:00
1 parent 6dbe6c6b24
commit cbeb78baba
2 files changed
+21 -18

No files matched your search

+4 -4
View File
@@ -101,12 +101,12 @@ try {
// ===== 暴露 webpack require(hornet 工具链 hook_gamemode/hornet_lib 依赖)=====
window.__wp_require__ = __webpack_require__;
// ===== 出错时不自动刷新页面(**默认关闭**;localStorage.hornetBlockReload='1' 才开启)=====
// ⚠️ 开启后会接管 location.reload():游戏断线时正是靠刷页来重连,被拦截后它只能反复内部重连
// + 反复拉 config.xml,表现为「一直重连 + 反复访问 xml」。只在需要看 err toast 时临时开。
// ===== 出错时不自动刷新页面(**默认开启**;localStorage.hornetBlockReload='0' 关闭)=====
// 游戏遇到致命错误/断线会调用 location.reload() 刷页,err toast 一闪就被刷掉、看不到原因。
// ⚠️ 拦截期间游戏无法靠刷页重连,只能反复内部重连(临时排查用;稳定后可设 hornetBlockReload='0')。
var __hornetRealReload__ = window.location.reload.bind(window.location);
var __reloadHijacked__ = false;
if (localStorage.getItem('hornetBlockReload') === '1') {
if (localStorage.getItem('hornetBlockReload') !== '0') {
try {
window.location.reload = function () {
console.warn('[Hornet] 已拦截自动刷新(保留页面,便于查看 err toast)。调用栈:\n' + new Error().stack);
+17 -14
View File
@@ -309,25 +309,28 @@ var __webpack_modules__ = window.__modules__;
// ===== 暴露 webpack require(hornet 工具链 hook_gamemode/hornet_lib 依赖)=====
window.__wp_require__ = __webpack_require__;
// ===== 出错时不自动刷新页面 =====
// ===== 出错时不自动刷新页面(**默认开启**;localStorage.hornetBlockReload='0' 关闭)=====
// 游戏在致命错误/断线后会调用 location.reload(),err toast 一闪就被刷掉、看不到原因。
// 拦截自动刷新并保留页面:① 接管 location.reload;② 不可写时用 beforeunload 守卫兜底。
// 需要刷新时按 F5:先放行一次守卫,再用原始 reload 真正刷新。
// ⚠️ 拦截期间游戏无法靠刷页重连,只能反复内部重连(临时排查用;稳定后设 hornetBlockReload='0')。
var __hornetRealReload__ = window.location.reload.bind(window.location);
var __reloadHijacked__ = false;
try {
window.location.reload = function () {
console.warn('[Hornet] 已拦截自动刷新(保留页面,便于查看 err toast)。调用栈:\n' + new Error().stack);
};
__reloadHijacked__ = (window.location.reload !== __hornetRealReload__);
} catch (__reloadErr__) { __reloadHijacked__ = false; }
window.addEventListener('beforeunload', function (e) {
if (window.__hornetAllowUnload__) { window.__hornetAllowUnload__ = false; return; }
if (__reloadHijacked__) return;
e.preventDefault();
e.returnValue = '';
});
console.log('[Hornet] 自动刷新拦截: ' + (__reloadHijacked__ ? 'location.reload 已接管' : 'beforeunload 守卫'));
if (localStorage.getItem('hornetBlockReload') !== '0') {
try {
window.location.reload = function () {
console.warn('[Hornet] 已拦截自动刷新(保留页面,便于查看 err toast)。调用栈:\n' + new Error().stack);
};
__reloadHijacked__ = (window.location.reload !== __hornetRealReload__);
} catch (__reloadErr__) { __reloadHijacked__ = false; }
window.addEventListener('beforeunload', function (e) {
if (window.__hornetAllowUnload__) { window.__hornetAllowUnload__ = false; return; }
if (__reloadHijacked__) return;
e.preventDefault();
e.returnValue = '';
});
}
console.log('[Hornet] 自动刷新拦截: ' + (__reloadHijacked__ ? '已启用(会阻断断线重连)' : (localStorage.getItem('hornetBlockReload') === '0' ? '已关闭(hornetBlockReload=0)' : 'beforeunload 守卫')));
// ===== F5 刷新页面(游戏会吞掉 F5,这里在捕获阶段兜底)=====
window.addEventListener('keydown', function (e) {