修复评论区不渲染:id 全局变量遮蔽导致脚本未加载
容器是 <div id="twikoo">,浏览器会把带 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/(覆盖部署)
This commit is contained in:
@@ -14,7 +14,7 @@ set -euo pipefail
|
|||||||
# ========== 配置区(按需修改) ==========
|
# ========== 配置区(按需修改) ==========
|
||||||
PI_HOST="192.168.1.87" # 树莓派 IP
|
PI_HOST="192.168.1.87" # 树莓派 IP
|
||||||
PI_USER="pi"
|
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_HOST="81.70.45.191" # 云服务器 IP
|
||||||
CLOUD_USER="root"
|
CLOUD_USER="root"
|
||||||
|
|||||||
@@ -30,8 +30,17 @@ const isEnabled = Boolean(envId)
|
|||||||
;(() => {
|
;(() => {
|
||||||
const SCRIPT_SRC = "/assets/js/twikoo.min.js"
|
const SCRIPT_SRC = "/assets/js/twikoo.min.js"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注意:容器是 <div id="twikoo">,而浏览器会把带 id 的元素暴露成
|
||||||
|
* window 上的同名全局变量 —— 所以脚本加载前 window.twikoo 就已经
|
||||||
|
* 是那个 DOM 元素了。这里必须检查真正的 API 是否存在,
|
||||||
|
* 不能只判断 `if (window.twikoo)`,否则会误以为已加载而跳过。
|
||||||
|
*/
|
||||||
|
const isLoaded = () =>
|
||||||
|
typeof window.twikoo === "object" && typeof window.twikoo?.init === "function"
|
||||||
|
|
||||||
const loadScript = () => {
|
const loadScript = () => {
|
||||||
if (window.twikoo) return Promise.resolve()
|
if (isLoaded()) return Promise.resolve()
|
||||||
|
|
||||||
const existing = document.querySelector("script[data-twikoo]")
|
const existing = document.querySelector("script[data-twikoo]")
|
||||||
if (existing) {
|
if (existing) {
|
||||||
|
|||||||
Reference in New Issue
Block a user