Discourse埋め込み失敗(リファラーが混同)

こんにちは、

Mediawiki インスタンスに Discourse を埋め込む作業を行っておりますが、奇妙な問題が発生しているようです。

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">

その後、30 秒後に(iframe 内の meta http-equiv="refresh" によるものですが)、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">

この時点で、コンソールにエラーが表示されます:

Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('https://forum.dev.tripleperformance.fr') does not match the recipient window's origin ('https://wiki.dev.tripleperformance.fr').

これはおそらく、data-embedded 属性内の referer が親ページではなく自分自身(self)になっているためでしょう(リフレッシュの開始元が自分自身であるため、これは実際には期待される動作かもしれません)。

補足:私は Docker などの影響で低速な開発マシンを使用しています。競合状態(レースコンディション)などが発生している可能性も十分にあります…?

参考までに、フォーラムにウィキページへのリンクを含む投稿を作成しようとしたところ、正常に解決されました(埋め込みが正しく表示されています)。また、コンテナ内からそのURLをcurlで取得することも成功しました。なぜ新しいトピックがすぐに作成されないのか、理解できません。

こんにちは、Bertrand さん!

おそらくこの問題はすでに解決していると思いますが、もしまだであれば、test-passed ブランチのコードを試してみてください。このブランチには、似た症状の問題に対する今日の修正が含まれています。

この問題が報告された 8 月 25 日以降にコードに導入されたものであるため、全く同じ問題である可能性は低いですが、もし未解決であれば、ぜひ試してみてください。

では!

レオナルド様

ありがとうございます。試してみましたが、あまりうまくいきませんでした。ただ、この種の統合は当社のプラットフォームには適合しないため、あまり深く掘り下げることはしませんでした(プラットフォーム上の各ページのためではなく、コードでオンデマンドでトピックを作成する方が良いと考えています)。

お察しします。でも、試す価値はありましたね。:slight_smile:
では!