Échec de l'exécution de 'postMessage' sur 'DOMWindow'

J’ai cherché sur le forum une réponse à ce problème et j’ai essayé quelques-unes des différentes options proposées.

J’exécute une publication Ghost sur un Droplet Digital Ocean et un forum Discourse sur un Droplet Digital Ocean séparé, car le consensus du forum semblait être qu’il ne faut pas installer deux applications sur le même serveur.

forum.monsite point com
monsite point com

Je voudrais que les commentaires Discourse apparaissent sur chaque publication, et je n’ai pas de slug d’URL mysite.com/blog. J’ai donc suivi la documentation pour obtenir l’URL du site actuel et l’utiliser comme URL d’intégration.

En suivant la documentation ici : Documentation officielle d’intégration

Je parviens à faire apparaître le cadre sur toutes les nouvelles publications. Cependant, il ne se charge pas et affiche l’erreur suivante :
Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('<URL>') does not match the recipient window's origin ('<URL>').

J’ai confirmé que mes paramètres HTTPS sont corrects. Mon URL intégrée imite le tutoriel, mais j’ai essayé quelques variations de discourseEmbedUrl pour tenter de résoudre le problème. Toutes les références à l’URL de l’article actuel provoquent la même erreur.

J’ai également essayé d’ajouter une fonction d’attente, pensant peut-être que le cadre ne se chargeait pas, mais la même erreur persiste.

Voici mon code d’intégration actuel :

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

Toute aide serait appréciée, car j’ai épuisé toutes les solutions proposées. Je pense que cela pourrait avoir un rapport avec le fait que mon forum et mes articles se trouvent sur des machines séparées.

1 « J'aime »

Bonjour @Joseph3 :wave: bienvenue sur Discourse Meta :slight_smile:

avez-vous déjà vu ce sujet ?

2 « J'aime »

Salut Lilly, oui, j’ai également suivi ce tutoriel pour vérifier que l’installation de Discourse hébergée par ghost était la même.

J’ai tenté d’utiliser leur référence d’URL comme ci-dessous :

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

Y a-t-il quelque chose d’incorrect là-dedans ?

De plus, cela a abouti à la même erreur. Merci pour votre réponse rapide.

1 « J'aime »

C’est une erreur assez courante : Search results for 'Failed to execute 'postMessage' on 'DOMWindow'' - Discourse Meta. C’est peu probable, mais une cause possible de l’erreur est de ne pas avoir rempli le paramètre « Nom d’utilisateur pour la création de sujet » qui se trouve sur la page des paramètres d’intégration de Discourse.

Cela ne devrait pas poser de problème.

Ce qui peut causer des problèmes, c’est si votre site Discourse est privé : Embed Discourse comments on another website via Javascript.

2 « J'aime »

Salut Simon, à l’origine, j’avais un problème avec le nom d’utilisateur incorrect pour la création de sujet dans le panneau d’administration de Discourse. Mais je l’ai corrigé pour afficher JosephPaul dans le panneau ainsi que dans :
\u003cmeta name='discourse-username' content='JosephPaul'\u003e

Donc, ceux-ci sont corrects à ma connaissance.

J’ai également examiné le deuxième lien que vous avez envoyé, et je pense que tout est correct. J’ai juste essayé de désactiver l’exigence de connexion sur mon site Discourse et cela n’a pas résolu le problème.

Le problème persiste même avec les nouveaux articles générés.

Modifier :
J’ai de nouveau tenté de suivre certaines des modifications d’URL d’intégration suggérées dans le message ci-dessus. Le code suivant recrée l’erreur :

\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

Tentative de dépannage supplémentaire suite au fil de discussion de Simon :

J’ai défini l’URL d’intégration pour inclure également www. comme l’a suggéré un utilisateur. L’erreur suivante se produit maintenant :

Referer:`https://josephpaul.com/test-post/`
Le referer n'a pas été envoyé, ou ne correspondait à aucun des hôtes suivants :
josephpaul.com
1 « J'aime »

Des idées à ce sujet, Simon ? Je suis prêt à fournir toutes les sorties ou exemples de code dont vous pourriez avoir besoin.

Envoyez-moi un message privé avec un lien vers un article de blog sur lequel vous avez le code d’intégration et je jetterai un coup d’œil.

Pour cerner la cause du problème, ce serait formidable si vous pouviez essayer d’ajouter le code d’intégration qui se trouve sur votre page d’intégration Discourse sans aucune modification, autre que le remplacement de EMBED_URL par l’URL de la page du blog.

2 « J'aime »

Salut Simon, bien sûr, je serai heureux de t’envoyer un extrait ainsi qu’un lien vers le site en direct. Comment puis-je envoyer un message privé sur Discourse ? Peut-être que mon niveau de confiance n’est pas assez élevé.

La documentation disait de cliquer sur ton nom et qu’une fenêtre contextuelle avec un message apparaîtrait, mais je ne vois rien de mon côté.

Merci encore pour ton aide jusqu’à présent ! Je ne manquerai pas de mettre à jour ma question avec la solution trouvée.

Solution trouvée - Merci à @simon et @Lilly pour une expérience de support incroyable.

Éléments qui ont été modifiés selon les conseils de Simon :

Modification du code du tutoriel pour ne pas inclure les termes obsolètes et inclure une instruction if :

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

De plus, ajout de https://www.test.com et https://test.com
Au paramètre src de la politique de sécurité du contenu du site Discourse, trouvé dans l’administration de Discourse > onglet des paramètres.

Remarque : D’après mon expérience, si vous actualisez la page trop rapidement sur un petit droplet, vous pourriez ne pas voir les résultats pendant environ 30 secondes. Laissez donc un peu de temps à chaque redémarrage fantôme et à chaque modification du panneau d’administration de Discourse pour qu’ils prennent effet.

Remarque supplémentaire : Il y a une latence importante lors de la vérification de la section des commentaires de tout article pour la première fois. @simon recommande de toujours vérifier vous-même l’article en premier, afin que Discourse ait le temps de générer les sections de commentaires associées à la publication du forum.

Encore merci à tous, très utile. De nombreux commentateurs YouTube sur le tutoriel que j’ai regardé avaient les mêmes problèmes que moi, qui faisaient référence aux instructions d’intégration Discourse/Ghost. Les liens YouTube peuvent être obsolètes, donc cette aide a été formidable.

4 « J'aime »

Je suis tellement content que vous l’ayez fait fonctionner maintenant. :+1: l’intégration est un peu délicate car elle n’est pas tout à fait la même pour chaque configuration. Merci d’avoir partagé votre expérience, j’ai appris de cela. De plus, @simon est incroyable et l’une des personnes les plus gentilles, les plus intelligentes et les plus serviables que j’ai eu le plaisir de connaître. Et il se trouve qu’il est aussi assez bon avec Discourse. :slight_smile:

3 « J'aime »

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