在另一个网站上通过 iframe 嵌入整个 Discourse 论坛

这已经在另外两个帖子中讨论过了,但那些帖子已被锁定:

有些人认为我们应该转而致力于重新设计 Discourse,使其与现有网站的设计风格相匹配。

根据经验,这非常困难。相关的标记(Markup)及其 CSS 非常复杂,且缺乏灵活性。例如,Discourse 头部与主内容之间的 DOM 树结构差异很大。在 Discourse 内置编辑器中注入头部内容时,注入的内容会与实际 Discourse 头部相距甚远。

相信我,简单地“让你的 Discourse 遵循你的主网站主题”是非常困难的。

接下来我想尝试的是将 Discourse 嵌入到 <iframe> 中。让我们看看效果如何。


功能请求!如果 Discourse 能以一组自定义元素的形式被调用,那就太棒了。例如:

<!-- ... 一些自定义标记 ... -->

<discourse-actions backend="http://url.to/actual/discourse/instance">

<!-- ... 一些自定义标记 ... -->

<discourse-main backend="http://url.to/actual/discourse/instance">

这将允许将 Discourse 的各个部分嵌入到网站的任何位置,并且这些元素会连接到指定的后端。

直接访问 http://url.to/actual/discourse/instance 仍会以常规方式打开 Discourse,作为一个独立的 Web 应用程序。

基本上,这将使 Discourse 的各个部分能够在整体 HTML 结构中使用(类似于 Handlebars 模板片段,但基于 Web 标准构建,更具前瞻性)。

想象一下,如果拥有这样的功能,还有哪些可能性(例如,当自定义元素具有不同的 backend 属性值时)……

我们当然无法阻止您尝试在 iframe 中运行 Discourse,但正如其他主题中提醒的那样……这样做预计会不稳定且存在问题……我们也不打算花费时间解决与 iframe 相关的问题。

与其如此,不如详细描述您在为 Discourse 设置主题时遇到的具体问题,这样我们才能提供帮助并/或改进流程。过去几年中,我们在主题设置方面已经做了大量改进,这也是我们肯定希望在可能的情况下继续支持和优化的方向。

确实有一些元素比其他元素更难自定义,例如页眉。这是因为为了提升性能,我们引入了虚拟 DOM(https://meta.discourse.org/t/a-tour-of-how-the-widget-virtual-dom-code-in-discourse-works/40347)。

因此,如果您希望在页眉中插入内容,就需要利用该虚拟 DOM 系统,而不是通过管理界面在页眉之前或之后添加内容(在 Developing Discourse Themes & Theme Components 的高级插件 API 部分有所介绍)。此外,在现有的 #theme-component 中也有许多操作页眉内容的良好示例,例如 https://meta.discourse.org/t/custom-header-links/90588。

这功能如果能实现就太好了,但我发现它仍然无法正常工作,尝试时只会显示: