"use client"; import { useEffect, useState } from "react"; import { useLocale } from "next-intl"; import { Skeleton } from "../ui/skeleton"; export default function TwikooComment() { const locale = useLocale(); const [isLoading, setIsLoading] = useState(true); useEffect(() => { const cdnScript = document.createElement("script"); cdnScript.src = "https://cdn.staticfile.org/twikoo/1.6.32/twikoo.all.min.js"; cdnScript.async = true; const loadSecondScript = () => { const initScript = document.createElement("script"); initScript.innerHTML = ` twikoo.init({ envId: "https://comment.oiov.dev", el: '#twikoo-comment', pageSize: 10, includeReply: true, lang: "${locale === "zh" ? "zh-CN" : "en"}", path: location.pathname, onCommentLoaded: function() { // 评论加载完成后隐藏 loading window.dispatchEvent(new CustomEvent('twikoo-loaded')); } }); `; initScript.id = "twikoo-init-id"; document.body.appendChild(initScript); }; // 监听 twikoo 加载完成事件 const handleTwikooLoaded = () => { setIsLoading(false); }; window.addEventListener("twikoo-loaded", handleTwikooLoaded); cdnScript.addEventListener("load", loadSecondScript); document.body.appendChild(cdnScript); // 设置超时,防止一直加载 const timeout = setTimeout(() => { setIsLoading(false); }, 5000); return () => { clearTimeout(timeout); window.removeEventListener("twikoo-loaded", handleTwikooLoaded); if (loadSecondScript) { cdnScript.removeEventListener("load", loadSecondScript); } if (cdnScript && document.body.contains(cdnScript)) { document.body.removeChild(cdnScript); } const secondScript = document.querySelector("#twikoo-init-id"); if (secondScript && document.body.contains(secondScript)) { document.body.removeChild(secondScript); } }; }, [locale]); return (