大家好,
我花了几个小时试图将Ghost博客的深色模式与Discourse嵌入同步。虽然我已成功检测到宿主网站上的深色模式状态并传递了正确的参数,但Discourse似乎对匿名用户忽略了这些参数。
我们的设置和已验证的内容:
参数注入:我们在Ghost中使用自定义脚本来检测data-color-scheme="dark"属性。我们已通过浏览器控制台和网络标签页验证了参数?color_scheme_id=13(我们的调色板13)或?theme_id=4(一个专用的深色主题)已正确附加到embed.js请求中,并随后附加到Iframe的src中。
主题配置:在Discourse中,目标主题(ID 4)和颜色方案(ID 13)都标记为“用户可选”(User Selectable)。颜色方案还被设置为活动主题的“默认深色”(Default Dark)。
问题:尽管Iframe URL清楚地显示.../embed/comments?topic_id=...&theme_id=4,但对于匿名访客,渲染的内容仍然是浅色模式(默认)。
执行的测试:
直接在脚本中硬编码theme_id。
在embed.js加载完成后通过JavaScript手动修改Iframe的src。
尝试在主题组件中使用@media(prefers-color-scheme: dark)来强制样式,但这在嵌入上下文中似乎也被忽略或覆盖了。
我的问题是:Discourse嵌入逻辑中是否有特定的安全设置或硬编码的限制,阻止匿名用户通过URL参数更改主题或颜色方案?
我们希望避免“未样式内容闪烁”(Flash of unstyled content),并确保在深色博客文章上的读者不会被白色的评论区刺痛。是否有任何app.yml设置或隐藏的站点设置可以控制嵌入内容的这种行为?
Discourse版本:Discourse 3.5.3
感谢您的任何见解!