现有帖子嵌入错误

你好!我们遇到了“嵌入错误”,iframe 显示:

嵌入错误
Referer(来源):
来源未发送,或与以下主机不匹配:

尽管域名完全相同,控制台却显示:

Uncaught SyntaxError: Failed to execute 'postMessage' on 'Window': Invalid target origin '' in a call to 'postMessage'.
    _embed-application-3723be59920e64ecda9d66b1e7c4c55378fb9dadfa7f422febd4f1b346c1aa05.js:6 Uncaught DOMException: Failed to execute 'postMessage' on 'Window': Invalid target origin '' in a call to 'postMessage'.
        at e (https://sjc1.discourse-cdn.com/business5/brotli_asset/embed-application-3723be59920e64ecda9d66b1e7c4c55378fb9dadfa7f422febd4f1b346c1aa05.js:1:42)
        at window.onload (https://sjc1.discourse-cdn.com/business5/brotli_asset/embed-application-3723be59920e64ecda9d66b1e7c4c55378fb9dadfa7f422febd4f1b346c1aa05.js:1:470)

我们使用的是“替代配置”,因此 已解决的议题 对我们帮助不大。

(替代配置)链接到现有议题

有些人不希望 Discourse 在其论坛上自动创建议题。他们希望自行创建议题,然后只需告知嵌入代码要关联哪个议题。你可以通过略微修改嵌入代码来实现:

<div id='discourse-comments'></div>

<script type="text/javascript">
  DiscourseEmbed = { discourseUrl: 'http://discourse.example.com/',
                     topicId: 12345 };

  (function() {
    var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
    d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
  })();
</script>

这里唯一的区别是我们用 Discourse 中某个议题的 ID 替换了 discourseEmbedUrl。如果你这样做,将不会创建新议题,并会自动显示该议题的评论。

来源:Embed Discourse comments on another website via Javascript

我们是否有简便的方法来调试此问题?它从哪里获取 referer,为什么可能是空的?
这是一个已知或常见的问题吗?是否可以在出错时隐藏 iframe 或其内容?

点击跳转到报错的脚本位置,似乎无法在 #data-embedded 元素中为 postMessage 找到 referer。

您可以使用检查器查看嵌入在页面中的 iframe,并检查其是否包含带有正确 referer 的 meta 标签。它应该类似于:<meta id='data-embedded' data-referer="YOUR_SITE">

YOUR_SITE 应由 iframe 自动填充。

<meta id="data-embedded" data-referer="">

它是空的😱这是什么意思?

这意味着由于某种原因,您嵌入的 iframe 未收到 referrer。我不确定是否有代理或重定向等机制将其剥离,还是浏览器本身的问题。

https://meta.discourse.org/t/embedding-discourse-comments-via-javascript/31963/353?u=falco