Impossibile eseguire 'postMessage' su 'DOMWindow'

Ho cercato nel forum una risposta a questo problema e ho provato alcune delle diverse opzioni pubblicate.

Gestisco una pubblicazione Ghost su un Digital Ocean Droplet e un forum Discourse su un Digital Ocean Droplet separato, poiché il consenso del forum sembrava essere che non si dovrebbero installare due applicazioni sullo stesso server.

forum.mysite dot com
mysite dot com

Vorrei che i commenti di Discourse apparissero su ogni post e non ho uno slug di URL mysite.com/blog. Quindi ho seguito la documentazione per ottenere l’URL del sito corrente e usarlo come URL di incorporamento.

Seguendo la documentazione qui: Documentazione ufficiale sull’integrazione

Riesco a far apparire il frame su qualsiasi nuovo post. Tuttavia, non si carica e fornisce il seguente errore:
Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('<URL>') does not match the recipient window's origin ('<URL>').

Ho confermato che le mie impostazioni HTTPS sono corrette. Il mio URL incorporato imita il tutorial, ma ho provato alcune varianti diverse di discourseEmbedUrl per tentare di risolvere il problema. Tutti i riferimenti all’URL dell’articolo corrente causano lo stesso errore.

Ho anche provato ad aggiungere una funzione di attesa, pensando forse che il frame non si caricasse, ma lo stesso errore persiste.

Questo è il mio codice incorporato attuale:

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

Qualsiasi aiuto qui sarebbe apprezzato, poiché ho esaurito tutte le soluzioni pubblicate. Credo che possa avere a che fare con il fatto che il mio forum e i miei articoli si trovino su macchine separate.

1 Mi Piace

Ciao @Joseph3 :wave: benvenuto su Discourse Meta :slight_smile:

hai già visto questo argomento?

2 Mi Piace

Ciao Lilly, sì, ho seguito anche quel tutorial per ricontrollare che l’installazione di discourse ospitata su ghost fosse la stessa.

Ho tentato di utilizzare il loro riferimento URL come di seguito:

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

C’è qualcosa di errato lì?

Inoltre, ma ha prodotto lo stesso errore. Grazie per la tua pronta risposta.

1 Mi Piace

Questo è un errore abbastanza comune: Search results for 'Failed to execute 'postMessage' on 'DOMWindow'' - Discourse Meta. È una possibilità remota, ma una causa possibile dell’errore è non aver compilato l’impostazione “Nome utente per la creazione di argomenti” che si trova nella pagina delle impostazioni di incorporamento di Discourse.

Ciò non dovrebbe causare problemi.

Qualcosa che può causare problemi è se il tuo sito Discourse è privato: Embed Discourse comments on another website via Javascript.

2 Mi Piace

Ciao Simon, originariamente avevo il problema di non aver inserito correttamente il nome utente per la creazione dell’argomento nel pannello di amministrazione di Discourse. Ma l’ho corretto in modo che venga visualizzato JosephPaul nel pannello e anche in:
<meta name='discourse-username' content='JosephPaul'>

Quindi, a quanto ne so, sono corretti.

Ho anche dato un’occhiata al secondo link che mi hai inviato e credo che tutto sia corretto. Ho appena provato a impostare il mio sito Discourse in modo che non richieda l’accesso e questo non ha risolto il problema.

Il problema persiste anche con i post appena generati.

Modifica:
Ho tentato nuovamente di seguire alcune delle modifiche suggerite all’URL di incorporamento nel post precedente. Il seguente codice ricrea l’errore:

<script type="text/javascript">

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

Ulteriore tentativo di risoluzione dei problemi seguendo il thread di Simon:

Ho impostato l’URL di incorporamento in modo che includa anche www. come suggerito da un utente. Ora si verifica il seguente errore:

Referer:`https://josephpaul.com/test-post/`
Il referer non è stato inviato o non corrispondeva a nessuno dei seguenti host:

josephpaul.com
1 Mi Piace

Qualche idea a riguardo, Simon? Sono felice di fornire qualsiasi output o esempio di codice di cui tu abbia bisogno.

Inviami un messaggio privato con un link a un post del blog su cui hai il codice di incorporamento e darò un’occhiata.

Per restringere la causa del problema, sarebbe fantastico se potessi provare ad aggiungere il codice di incorporamento che si trova sulla tua pagina di incorporamento di Discourse senza alcuna modifica, oltre a sostituire EMBED_URL con l’URL della pagina del blog.

2 Mi Piace

Ciao Simon, certo, ti invierò volentieri uno snippet e un link al sito live. Come si invia un messaggio privato su Discourse? Forse il mio livello di fiducia non è abbastanza alto.

La documentazione diceva di cliccare sul tuo nome e sarebbe apparso un popup con il messaggio, ma non vedo nulla da parte mia.

Grazie ancora per l’aiuto finora! Sarò sicuro di aggiornare la mia domanda con qualsiasi soluzione venga raggiunta.

Soluzione trovata - Grazie a @simon e @Lilly per un’esperienza di supporto incredibile.

Elementi che sono stati modificati secondo il consiglio di Simon:

Codice modificato dal tutorial per non includere termini deprecati e includere un’istruzione 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>

Inoltre, aggiunti https://www.test.com e https://test.com
Alle impostazioni src della content security policy del sito Discourse, trovate nella scheda Impostazioni dell’amministratore di Discourse.

Nota: per mia esperienza, ricaricando la pagina troppo rapidamente quando si è su un droplet piccolo, i risultati potrebbero non apparire per circa 30 secondi, quindi concedere qualche istante a ogni riavvio di ghost e a ogni modifica nel pannello di amministrazione di Discourse per avere effetto.

Nota aggiuntiva: c’è una lunga latenza quando si controlla la sezione commenti di un articolo per la prima volta, @simon consiglia di controllare sempre prima l’articolo stesso, in modo che discourse abbia il tempo di generare le sezioni commenti associate al post del forum.

Grazie ancora a tutti, molto utile. Molti commentatori su YouTube del tutorial che ho guardato avevano gli stessi problemi miei, che facevano riferimento alle istruzioni di integrazione discourse/ghost. I link di YouTube potrebbero essere deprecati, quindi questo aiuto è stato ottimo.

4 Mi Piace

Sono così felice che ora funzioni. :+1: l’embedding è un po’ complicato perché non è esattamente lo stesso per ogni configurazione. Grazie per aver condiviso la tua esperienza, ho imparato da questo. Inoltre, @simon è fantastico e una delle persone più gentili, intelligenti e disponibili che ho avuto il piacere di conoscere. E si dà il caso che sia anche piuttosto bravo con Discourse. :slight_smile:

3 Mi Piace

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