diff --git a/app.js b/app.js index bb6c702..bfe34f3 100644 --- a/app.js +++ b/app.js @@ -1037,3 +1037,64 @@ function openAdmin() { loadStats(); card.querySelector("#admin-refresh").addEventListener("click", loadStats); } + +// ===== 分享与 PWA 安装提示 ===== +const btnShare = document.getElementById("btn-share"); +let installPromptEvt = null; // beforeinstallprompt 事件暂存,供分享卡片内"安装到主屏幕"使用 +window.addEventListener("beforeinstallprompt", (e) => { + e.preventDefault(); + installPromptEvt = e; +}); + +/** 分享本站:两端统一弹二维码卡片,手机端贴底升起;支持系统分享时另有"发送给朋友"。 */ +btnShare.addEventListener("click", () => { + openShareCard(location.origin + "/"); +}); + +/** 分享卡片:二维码扫码即达 + 复制链接 + 系统分享(如可用)+ 可安装时显示安装按钮。 */ +function openShareCard(url) { + const mask = document.createElement("div"); + mask.className = "admin-mask share"; + const card = document.createElement("div"); + card.className = "admin-card share-card"; + card.setAttribute("role", "dialog"); + card.setAttribute("aria-label", "分享本站"); + card.innerHTML = ` +
分享本站
+ 本站二维码 + ${url} +
+ ${navigator.share ? '' : ""} + + ${installPromptEvt ? '' : ""} + +
`; + mask.appendChild(card); + document.body.appendChild(mask); + const close = () => mask.remove(); + mask.addEventListener("click", (e) => { if (e.target === mask) close(); }); + card.querySelector("#share-close").addEventListener("click", close); + card.querySelector("#share-native")?.addEventListener("click", async () => { + try { + await navigator.share({ + title: "经典诵读", + text: "心经、金刚经、道德经等经典在线诵读:千问语音合成,逐字高亮跟读,山寺配乐。", + url, + }); + } catch { /* 用户取消分享 */ } + }); + card.querySelector("#share-copy").addEventListener("click", async (e) => { + try { + await navigator.clipboard.writeText(url); + e.target.textContent = "已复制"; + } catch { + e.target.textContent = "复制失败"; + } + }); + card.querySelector("#share-install")?.addEventListener("click", async () => { + installPromptEvt.prompt(); + await installPromptEvt.userChoice; + installPromptEvt = null; + close(); + }); +} diff --git a/bg-m.jpg b/bg-m.jpg new file mode 100644 index 0000000..baa718f Binary files /dev/null and b/bg-m.jpg differ diff --git a/bg.jpg b/bg.jpg new file mode 100644 index 0000000..2dfb0e5 Binary files /dev/null and b/bg.jpg differ diff --git a/deploy.sh b/deploy.sh index 6af91c9..d8d3a06 100755 --- a/deploy.sh +++ b/deploy.sh @@ -14,7 +14,7 @@ HOST=154.8.162.18 USER=root DEST=/opt/fj # 注意:不同步 .env —— 服务器端 PORT=8018 与本地开发配置不同,避免覆盖。 -FILES=(index.html style.css app.js server.py sw.js manifest.json icon.svg icon-180.png icon-192.png icon-512.png README.md run.md) +FILES=(index.html style.css app.js server.py sw.js manifest.json icon.svg icon-180.png icon-192.png icon-512.png README.md run.md robots.txt sitemap.xml og.png qr.png poster.png bg.jpg bg-m.jpg) SSH_OPTS="-o StrictHostKeyChecking=no -o ConnectTimeout=15" SSH_CMD="ssh $SSH_OPTS" diff --git a/index.html b/index.html index b4e38e3..c6f3730 100644 --- a/index.html +++ b/index.html @@ -5,7 +5,13 @@ -心经 +经典诵读 · 心经 + + + + + + @@ -13,7 +19,7 @@ - + @@ -90,6 +96,7 @@
+