Discourse嵌入失败(Referer混乱)

你好,

我正在尝试将 Discourse 嵌入到 MediaWiki 实例中,但遇到一个奇怪的问题。

当我将 Wiki 页面链接到现有的 Discourse 主题时,一切运行顺畅:

window.DiscourseEmbed = { discourseUrl: 'https://forum.dev.tripleperformance.fr/',
                          topicId: 18};

但当我尝试创建主题时却失败了:

window.DiscourseEmbed = { discourseUrl: 'https://forum.dev.tripleperformance.fr/',
                          discourseEmbedUrl = 'https:' + mw.config.get('wgServer') + '/wiki/' + mw.config.get('wgPageName')};

iframe 首次加载时包含:

<meta id="data-embedded" data-referer="https://wiki.dev.tripleperformance.fr/wiki/Sandbox">

随后,由于 iframe 中的 meta http-equiv="refresh",在 30 秒后 iframe 重新加载,此时包含:

<meta id="data-embedded" data-referer="https://forum.dev.tripleperformance.fr/embed/comments?embed_url=https%3A%2F%2Fwiki.dev.tripleperformance.fr%2Fwiki%2FSandbox">

此时控制台报错:

在 DOMWindow 上执行 'postMessage' 失败:提供的目标源 ('https://forum.dev.tripleperformance.fr') 与接收窗口的源 ('https://wiki.dev.tripleperformance.fr') 不匹配。

这可能是因为 data-embedded 属性中的 referer 现在指向自身,而非父页面(考虑到刷新操作是由自身发起的,这或许符合预期)。

备注:我在一台因 Docker 等环境而运行较慢的开发机器上操作。很有可能是遇到了竞态条件或其他类似问题……?

仅供参考,我尝试在论坛中发布一篇包含维基页面链接的帖子,系统成功解析了它(嵌入内容显示正常)。我还在容器内使用 curl 请求该 URL,同样成功。我不明白为什么新话题没有立即创建……

你好,Bertrand!

希望这个问题您现在已经解决了。但如果没有,您可以尝试 test-passed 分支中的代码,该分支包含今天针对具有类似症状问题的修复。

该问题是在您报告此问题之后的 8 月 25 日之后引入的,因此不太可能是完全相同的问题。
不过,如果此问题仍未解决,您可以尝试一下。

祝好!

您好,Leonardo,

谢谢。我刚试了一下,但进展不大。我没有深入研究,因为这种集成不适合我们的平台(我更希望通过一些代码按需创建主题,而不是为我们平台上的每个页面都创建)。

听到这个消息我很难过,但值得一试 :slight_smile:
干杯!