TL;DR: Discourse restituisce “Errore nell’incorporamento” indipendentemente dagli host consentiti nelle impostazioni di incorporamento.
Ho un sito pubblicato su foo.com che incorpora i commenti dal forum Discourse su forum.foo.com, il quale funziona correttamente. Quando accedo, ad esempio, a https://foo.com/blog/2019-11-22/foo-0.9.6-released, vedo i commenti incorporati senza problemi. In questo caso, il codice script per l’incorporamento appare nel sorgente della pagina nel seguente modo:
<div id='discourse-comments'></div>
<script type="text/javascript">
DiscourseEmbed = { discourseUrl: 'https://forum.foo.com/', discourseEmbedUrl: 'https://foo.com/blog/2019-11-22/foo-0.9.6-released' };
(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>
Ho inoltre una versione di sviluppo del sito in esecuzione sul mio computer locale su localhost, dove incontro problemi con l’incorporamento: continua a restituirmi “Errore nell’incorporamento” invece dei commenti all’interno dell’HTML generato e restituito dal forum. Cioè, vedo il logo del forum e un link ad esso nell’angolo in alto a destra dell’area di incorporamento, ma invece dell’elenco dei commenti ricevo solo quel messaggio di errore.
Quando accedo, ad esempio, a http://localhost:1313/blog/2019-11-22-foo-0.9.6-released/, che è la pagina equivalente a quella del sito di produzione, il codice script per l’incorporamento appare nel sorgente della pagina nel seguente modo:
<div id='discourse-comments'></div>
<script type="text/javascript">
DiscourseEmbed = { discourseUrl: 'https://forum.foo.com/', discourseEmbedUrl: 'http://localhost:1313/blog/2019-11-22-foo-0.9.6-released/' };
(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>
Ho provato sia con che senza la barra finale / nell’impostazione discourseEmbedUrl, ma non fa alcuna differenza.
Non ho accesso diretto al server su cui è in esecuzione il forum, ma sono entrato nel pannello di amministrazione del forum e ho provato ad aggiungere diversi host consentiti nelle impostazioni di incorporamento. Le impostazioni attuali, per il sito di produzione che funziona con l’incorporamento, sono:
"Host Consentiti", "Nome Classe", "Whitelist Percorsi", "Pubblica nella Categoria"
foo.com, <vuoto>, /blog/.*, blog
Quello che ho aggiunto per far funzionare la versione di sviluppo locale del sito è:
"Host Consentiti", "Nome Classe", "Whitelist Percorsi", "Pubblica nella Categoria"
localhost, <vuoto>, /blog/.*, blog
localhost:1313, <vuoto>, /blog/.*, blog
<il mio IP esterno/pubblico come visto dal server del forum>, <vuoto>, /blog/.*, blog
<il mio IP esterno/pubblico come visto dal server del forum>:1313, <vuoto>, /blog/.*, blog
Ma nessuno di questi interventi ha funzionato; continuo a ricevere lo stesso messaggio di errore “Errore nell’incorporamento”.
Sono restio a scavare nel codice sorgente e provare a debuggarlo; preferirei ricevere qualche indicazione su cosa controlla Discourse quando determina che deve generare quel messaggio di errore. Qualcuno può dirmelo e come risolvere? Dovrebbe essere abbastanza semplice, ma Discourse si comporta come una scatola nera in questo caso.
Ho letto tutto di Embed Discourse comments on another website via Javascript ma non fornisce informazioni più utili.

