feat: 默认端口5070、部署文档与外网HTTPS及强制刷新

- 默认监听端口改为 5070(app.py、.env.example、PM2 配置)
- README/部署说明:仓库地址、/opt/LocalNav、root 运行、Nginx+HTTPS 外网接入
- iframe 工具栏在「刷新」旁增加「强制刷新」(跳过缓存,等同 Ctrl+F5)

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-05-30 11:24:25 +08:00
parent ea1c4bcf12
commit a8cf3422e4
7 changed files with 206 additions and 44 deletions
+48 -7
View File
@@ -98,9 +98,19 @@
</button>
<span class="frame-title" id="current-service-name"></span>
</div>
<button type="button" class="btn btn-secondary btn-toolbar-refresh" id="frame-refresh">
刷新
</button>
<div class="frame-toolbar-actions">
<button type="button" class="btn btn-secondary btn-toolbar-refresh" id="frame-refresh">
刷新
</button>
<button
type="button"
class="btn btn-secondary btn-toolbar-refresh"
id="frame-force-refresh"
title="强制刷新(等同 Ctrl+F5,跳过缓存)"
>
强制刷新
</button>
</div>
</div>
<div class="frame-wrap">
<iframe id="svc-frame" title="内嵌服务" hidden></iframe>
@@ -149,6 +159,7 @@
var links = document.querySelectorAll(".nav-link[data-url]");
var cards = document.querySelectorAll(".service-card[data-url]");
var btnRefresh = document.getElementById("frame-refresh");
var btnForceRefresh = document.getElementById("frame-force-refresh");
var btnBack = document.getElementById("frame-back-overview");
var currentBaseUrl = "";
@@ -179,9 +190,7 @@
setActive(nav);
}
function reloadUrl() {
var u = currentBaseUrl;
if (!u) return;
function buildCacheBustUrl(u, hard) {
var sep = u.indexOf("?") >= 0 ? "&" : "?";
var hash = "";
var base = u;
@@ -190,7 +199,35 @@
base = u.slice(0, hashPos);
hash = u.slice(hashPos);
}
frame.src = base + sep + "_navts=" + Date.now() + hash;
var ts = Date.now();
if (hard) {
return (
base +
sep +
"_navts=" +
ts +
"&_navnocache=" +
Math.random().toString(36).slice(2) +
hash
);
}
return base + sep + "_navts=" + ts + hash;
}
function reloadUrl() {
var u = currentBaseUrl;
if (!u) return;
frame.src = buildCacheBustUrl(u, false);
}
function forceReloadUrl() {
var u = currentBaseUrl;
if (!u) return;
frame.src = "about:blank";
frame.onload = function () {
frame.onload = null;
frame.src = buildCacheBustUrl(u, true);
};
}
function showDashboard() {
@@ -223,6 +260,10 @@
reloadUrl();
});
btnForceRefresh.addEventListener("click", function () {
forceReloadUrl();
});
btnBack.addEventListener("click", function () {
showDashboard();
});