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:
+48
-7
@@ -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();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user