Fehler bei der Ausführung von 'postMessage' auf 'DOMWindow'

Ich habe das Forum nach einer Antwort auf dieses Problem durchsucht und einige der verschiedenen geposteten Optionen ausprobiert.

Ich betreibe eine Ghost-Publikation auf einem Digital Ocean Droplet und ein Discourse-Forum auf einem separaten Digital Ocean Droplet, da der Konsens im Forum darin bestand, dass man nicht zwei Anwendungen auf demselben Server installieren sollte.

forum.mysite dot com
mysite dot com

Ich möchte, dass die Discourse-Kommentare bei jedem Beitrag erscheinen, und ich habe keine mysite.com/blog URL-Slug. Also folgte ich der Dokumentation, um die aktuelle Website-URL zu erhalten und diese als Einbettungs-URL zu verwenden.

Folge der Dokumentation hier: Offizielle Integrationsdokumentation

Ich kann den Frame bei neuen Beiträgen erscheinen lassen. Er wird jedoch nicht geladen und gibt folgenden Fehler aus:
Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('\u003cURL\u003e') does not match the recipient window's origin ('\u003cURL\u003e').

Ich habe bestätigt, dass meine HTTPS-Einstellungen korrekt sind. Meine eingebettete URL ahmt das Tutorial nach, aber ich habe einige verschiedene Variationen von discourseEmbedUrl ausprobiert, um das Problem zu beheben. Alle Verweise auf die aktuelle Artikel-URL verursachen denselben Fehler.

Ich habe auch versucht, eine Wartefunktion hinzuzufügen, da ich dachte, der Frame würde vielleicht nicht geladen, aber derselbe Fehler bleibt bestehen.

Dies ist mein aktueller Einbettungscode:

<div id='discourse-comments'></div>
<meta name='discourse-username' content='JosephPaul'>

<script type="text/javascript">
  DiscourseEmbed = {
    discourseUrl: 'https://forum.mysite.com/',
    discourseEmbedUrl: '{{url absolute="true"}}',
    // className: 'CLASS_NAME',
  };

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

Jede Hilfe hier wäre willkommen, da ich alle geposteten Lösungen ausgeschöpft habe. Ich glaube, es könnte mit meinen separaten Servern für Forum und Artikel zusammenhängen.

1 „Gefällt mir“

Hallo @Joseph3 :wave: willkommen bei Discourse Meta :slight_smile:

hast du dieses Thema schon gesehen?

2 „Gefällt mir“

Hallo Lilly, ja, ich habe dieses Tutorial ebenfalls befolgt, um zu überprüfen, ob die von Ghost gehostete Discourse-Installation dieselbe war.

Ich habe versucht, ihre URL-Referenz wie unten angegeben zu verwenden:

discourseEmbedUrl: 'https://mysite.com<%= current_page.url %>'

Ist dort etwas falsch?

Ebenso, aber es führte zum selben Fehler. Vielen Dank für Ihre schnelle Antwort.

1 „Gefällt mir“

Dies ist ein ziemlich häufiger Fehler: Search results for 'Failed to execute 'postMessage' on 'DOMWindow'' - Discourse Meta. Es ist ein Schuss ins Blaue, aber eine mögliche Ursache für den Fehler ist, dass die Einstellung “Benutzername für die Erstellung von Themen” auf der Einstellungsseite für Discourse-Einbettungen nicht ausgefüllt wurde.

Das sollte kein Problem darstellen.

Etwas, das Probleme verursachen kann, ist, wenn Ihre Discourse-Site privat ist: Embed Discourse comments on another website via Javascript.

2 „Gefällt mir“

Hallo Simon, ich hatte ursprünglich das Problem, dass der Benutzername für die Erstellung von Themen im Discourse-Admin-Panel nicht korrekt war. Aber ich habe ihn so korrigiert, dass er sowohl im Panel als auch in Folgendem angezeigt wird:
\u003cmeta name='discourse-username' content='JosephPaul'\u003e

Diese sind also meiner Meinung nach korrekt.

Ich habe mir auch den zweiten Link angesehen, den du gesendet hast, und glaube, dass alles korrekt ist. Ich habe gerade versucht, meine Discourse-Seite so umzustellen, dass keine Anmeldung erforderlich ist, und das hat das Problem nicht gelöst.

Das Problem besteht auch bei neu erstellten Beiträgen weiterhin.

Bearbeiten:
Ich habe erneut versucht, einige der vorgeschlagenen Änderungen an der Einbettungs-URL im obigen Beitrag zu befolgen. Der folgende Code verursacht den Fehler erneut:

\u003cscript type="text/javascript"\u003e

setTimeout(5000)
  DiscourseEmbed = {
    discourseUrl: 'https://forum.josephpaul.com/',
    discourseEmbedUrl: 'https://josephpaul.com{{page.url}}' };

  (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);
  })();
\u003c/script\u003e

Zusätzlicher Versuch zur Fehlerbehebung gemäß Simons Thread:
Ich habe die Einbettungs-URL so eingestellt, dass sie auch www. enthält, wie ein Benutzer vorgeschlagen hat. Der folgende Fehler tritt jetzt auf:

Referer:`https://josephpaul.com/test-post/`
Der Referer wurde entweder nicht gesendet oder stimmte mit keinem der folgenden Hosts überein:

josephpaul.com
1 „Gefällt mir“

Haben Sie Ideen dazu, Simon? Ich stelle Ihnen gerne alle Ausgaben oder Codebeispiele zur Verfügung, die Sie benötigen.

Schicken Sie mir eine private Nachricht mit einem Link zu einem Blogbeitrag, für den Sie den Einbettungscode haben, und ich werde ihn mir ansehen.

Um die Ursache des Problems einzugrenzen, wäre es großartig, wenn Sie versuchen könnten, den Einbettungscode, der auf Ihrer Discourse-Einbettungsseite zu finden ist, ohne Änderungen hinzuzufügen, außer EMBED_URL durch die URL der Blogseite zu ersetzen.

2 „Gefällt mir“

Hallo Simon, sicher, ich sende dir gerne einen Ausschnitt sowie einen Link zur Live-Seite. Wie kann ich auf Discourse eine Direktnachricht senden? Vielleicht ist mein Vertrauenslevel nicht hoch genug.

Die Dokumentation besagt, dass ich auf deinen Namen klicken soll und ein Popup mit einer Nachricht erscheinen wird, aber ich sehe das auf meiner Seite nicht.

Vielen Dank nochmals für die bisherige Hilfe! Ich werde meine Frage auf jeden Fall mit der gefundenen Lösung aktualisieren.

Lösung gefunden – Danke an @simon und @Lilly für eine unglaubliche Support-Erfahrung.

Elemente, die nach Simons Rat geändert wurden:

Der Code aus dem Tutorial wurde geändert, um veraltete Begriffe nicht mehr einzuschließen und eine if-Anweisung hinzuzufügen:


<div id='discourse-comments'></div>
<meta name="discourse-username" content="ForumAdminName">

<script type="text/javascript">
  if (window.location.pathname.indexOf('/p/') < 0) {
  DiscourseEmbed = {
    discourseUrl: 'https://forum.test.com/',
    discourseEmbedUrl: '{{url absolute="true"}}',
    // className: 'CLASS_NAME',
  };

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

Zusätzlich wurden https://www.test.com & https://test.com zur Content-Security-Policy-src-Einstellung der Discourse-Website im Discourse-Admin > Einstellungen-Tab hinzugefügt.

Hinweis – Nach meiner Erfahrung kann es, wenn Sie die Seite zu schnell aktualisieren, während Sie sich auf einem kleinen Droplet befinden, etwa 30 Sekunden dauern, bis Sie die Ergebnisse sehen. Geben Sie daher jedem Ghost-Neustart und jeder Bearbeitung des Discourse-Admin-Panels einige Momente Zeit, um wirksam zu werden.

Zusätzlicher Hinweis – Beim ersten Aufrufen des Kommentarbereichs eines Artikels gibt es eine lange Latenz. @simon empfiehlt, den Artikel immer zuerst selbst zu überprüfen, damit Discourse Zeit hat, die Kommentarbereiche zu generieren, die dem Forum-Beitrag zugeordnet sind.

Nochmals vielen Dank an alle, sehr hilfreich. Viele YouTube-Kommentatoren des Tutorials, das ich angesehen habe, hatten die gleichen Probleme wie ich, die sich auf die Discourse/Ghost-Integrationsanweisungen bezogen. Die YouTube-Links sind möglicherweise veraltet, daher war diese Hilfe großartig.

4 „Gefällt mir“

Ich bin so froh, dass es jetzt funktioniert. :+1: Einbettungen sind etwas knifflig, da sie nicht für jede Einrichtung gleich sind. Vielen Dank, dass Sie Ihre Erfahrungen geteilt haben, ich habe daraus gelernt. Außerdem ist @simon erstaunlich und einer der nettesten, klügsten und hilfreichsten Menschen, die ich kennenlernen durfte. Und er ist auch ziemlich gut mit Discourse. :slight_smile:

3 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.