From 4810c87d3069126b4fbe49ab4b436add10bd1c54 Mon Sep 17 00:00:00 2001 From: dsh Date: Mon, 14 Sep 2026 21:08:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AF=84=E8=AE=BA=E5=8C=BA?= =?UTF-8?q?=E4=B8=8D=E6=B8=B2=E6=9F=93=EF=BC=9Aid=20=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E5=8F=98=E9=87=8F=E9=81=AE=E8=94=BD=E5=AF=BC=E8=87=B4=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E6=9C=AA=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 容器是
,浏览器会把带 id 的元素暴露成 window 上的同名 全局变量,所以脚本加载前 window.twikoo 已指向那个 DOM 元素。原守卫 if (window.twikoo) 因此误判「已加载」而直接返回,真正的 twikoo 库从未被加载, 表现为只显示「评论」标题、容器为空。 改为检查真正的 API:typeof window.twikoo?.init === "function"。 验证(jsdom 对线上页面实测):init 为函数,容器渲染 23040 字节, 提交框/昵称/textarea 齐全,历史评论 |´・ω・)ノ 正常显示,无报错。 另:deploy.sh 的 PI_SITE_PATH 改为 /home/pi/www/Astro_firefly/(覆盖部署) --- deploy.sh | 2 +- src/components/Comments.astro | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/deploy.sh b/deploy.sh index decd85a..47f3cab 100755 --- a/deploy.sh +++ b/deploy.sh @@ -14,7 +14,7 @@ set -euo pipefail # ========== 配置区(按需修改) ========== PI_HOST="192.168.1.87" # 树莓派 IP PI_USER="pi" -PI_SITE_PATH="/home/pi/www/Astro_vermilion/" # 与 Firefly 分开放,方便对比 +PI_SITE_PATH="/home/pi/www/Astro_firefly/" # 沿用现有 nginx 站点目录(会覆盖原 Firefly) CLOUD_HOST="81.70.45.191" # 云服务器 IP CLOUD_USER="root" diff --git a/src/components/Comments.astro b/src/components/Comments.astro index 7082ab9..72cd550 100644 --- a/src/components/Comments.astro +++ b/src/components/Comments.astro @@ -30,8 +30,17 @@ const isEnabled = Boolean(envId) ;(() => { const SCRIPT_SRC = "/assets/js/twikoo.min.js" + /** + * 注意:容器是
,而浏览器会把带 id 的元素暴露成 + * window 上的同名全局变量 —— 所以脚本加载前 window.twikoo 就已经 + * 是那个 DOM 元素了。这里必须检查真正的 API 是否存在, + * 不能只判断 `if (window.twikoo)`,否则会误以为已加载而跳过。 + */ + const isLoaded = () => + typeof window.twikoo === "object" && typeof window.twikoo?.init === "function" + const loadScript = () => { - if (window.twikoo) return Promise.resolve() + if (isLoaded()) return Promise.resolve() const existing = document.querySelector("script[data-twikoo]") if (existing) {