248 字
1 分钟
修复 Twikoo 评论错误 twikoo is not defined

在之前引入 Twikoo 评论的教程中,由于脚本加载顺序,直接引入 CDN 脚本并立即调用 twikoo.init() 可能因加载顺序导致错误 twikoo is not defined

<script is:inline src="https://cdn.starryfrp.com/libs/twikoo/1.6.44/twikoo.all.min.js"></script>
<script is:inline define:vars={{ config }}>
twikoo.init(config) <!-- ❌ 这里可能会报错 -->
</script>

为了解决这个问题,可以采用 动态加载 + Swup 兼容 的方式。

首先,创建事件通知函数#

打开 /src/layouts/Layout.astro 文件,添加以下内容:

function initCommentComponent() {
const event = new Event("loadComment");
document.dispatchEvent(event);
}

接着,在 Swup 生命周期中和页面初始化时调用它#

function init() {
// ... 其他初始化
initCommentComponent(); // 首次加载
}
window.swup.hooks.on('content:replace', initCustomScrollbar)
window.swup.hooks.on("content:replace", () => {
initCustomScrollbar();
initCommentComponent();
});

最后,修改 Twikoo 评论组件#

/src/components/comment/Twikoo.astro
<div id="tcomment"></div>
<script is:inline src="https://cdn.starryfrp.com/libs/twikoo/1.6.44/twikoo.all.min.js"></script>
<script is:inline define:vars={{ config }}>
twikoo.init(config)
</script>
<script define:vars={{ config }}>
function loadTwikoo() {
const script = document.createElement("script");
script.src =
"https://cdn.starryfrp.com/libs/twikoo/1.6.44/twikoo.all.min.js";
script.defer = true;
script.onload = () => {
twikoo.init(config); // 传入配置信息
};
document.body.appendChild(script);
}
document.addEventListener("loadComment", loadTwikoo, { once: true });
</script>

酱酱,这样就完成了喵~

之后就不会在出现 twikoo is not defined 错误了喵~

修复 Twikoo 评论错误 twikoo is not defined
https://blog.ioll.cc/posts/2025/fix-twikoo-notdefined/
作者
星酱
发布于
2025-10-22
许可协议
CC BY-NC-SA 4.0