Embed Discourse-Kommentare auf einer anderen Website über Javascript

Ein Beitrag wurde in ein neues Thema aufgeteilt: Discourse mit external_id einbetten

Ist es für einen Dokumentations-Website-Anwendungsfall (Hunderte/Tausende von Seiten) möglich, nicht zu haben, dass Discourse das Thema generiert, wenn ein Benutzer die Seiten besucht, sondern wenn er einen Kommentar hinterlassen möchte, so wie Giscus funktioniert?

Dies ist jetzt „Allowlist“.

Dies ist jetzt „Username for topic creation“.

Gibt es abgesehen davon eine Möglichkeit, die Integration von http://localhost aus zu testen? Ich erhalte diese Fehlermeldung in der Konsole aufgrund des fehlenden HTTPS:

Refused to frame ‘https://forum.weaviate.io/’ because an ancestor violates the following Content Security Policy directive: “frame-ancestors ‘self’ https://localhost:3000”.

1 „Gefällt mir“

Hallo! Danke für die Meldung. Ich habe einige Teile des Leitfadens aktualisiert, aber er muss möglicherweise eingehend überprüft werden, um sicherzustellen, dass er ordnungsgemäß aktualisiert wurde und funktioniert.

Sie müssen möglicherweise einen Dienst wie ngrok verwenden.

2 „Gefällt mir“

Bearbeiten: Es stellt sich heraus, dass die Verwendung von url_escape auf der Einbettungs-URL (da ich Liquid verwende, um automatisch die richtige URL einzufügen) die Einbettung bricht. Hoppla :upside_down_face:

Hallo! Ich hatte vor, Forensoftware als Kommentarfunktion für meinen Blog zu verwenden. Als ich herausfand, dass ihr nicht nur eine Möglichkeit dafür habt, sondern diese auch gerade auf der Website von jemandem live ist, explodierte mein Gehirn :exploding_head:

Als ich jedoch versuchte, dieses System auf meiner Website zu implementieren, wurde eine Fehlermeldung auf meiner Website angezeigt, und im Fehlerprotokoll meines Forums erschien Folgendes:

Fehlermeldung
Nachricht (2 Kopien gemeldet)

Addressable::URI::InvalidURIError (Kann keine URI-Zeichenfolge mit einem mehrdeutigen Pfad zusammenstellen: 'https://eleboog.com/posts/jekyll-to-gemini/')
lib/url_helper.rb:157:in `normalize_with_addressable'
lib/url_helper.rb:94:in `normalized_encode'
app/models/embeddable_host.rb:50:in `url_allowed?'
app/controllers/embed_controller.rb:84:in `comments'
app/controllers/application_controller.rb:418:in `block in with_resolved_locale'
app/controllers/application_controller.rb:418:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:74:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:369:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:228:in `call'

Backtrace

addressable (2.8.4) lib/addressable/uri.rb:2337:in `to_s'
addressable (2.8.4) lib/addressable/uri.rb:856:in `initialize'
addressable (2.8.4) lib/addressable/uri.rb:697:in `new'
addressable (2.8.4) lib/addressable/uri.rb:697:in `normalized_encode'
lib/url_helper.rb:157:in `normalize_with_addressable'
lib/url_helper.rb:94:in `normalized_encode'
app/models/embeddable_host.rb:50:in `url_allowed?'
app/controllers/embed_controller.rb:84:in `comments'
actionpack (7.0.4.3) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (7.0.4.3) lib/abstract_controller/base.rb:215:in `process_action'

Env

HTTP HOSTS: forums.eleboog.com

Ich verwende Jekyll, um meinen Blog zu hosten, und meine Foren daneben mit Nginx-Virtual-Hosts. Ich habe eleboog.com als erlaubten Host und /posts/.* als meine Pfad-Allowlist. Irgendwelche Ideen, was dieses Problem verursachen könnte? Vielen Dank!

Ich war zwiegespalten, aber nach einigen Änderungen habe ich es geschafft. Ich arbeite mit meinem Ghost-Blog und Discourse.
Hier ist, was ich in die Datei post.hbs für alle meine Beiträge eingefügt habe:

{{#post}}
                    <div>
                        <div>
                            {{> "comments"}}
                            {{!-- {{#has tag="25"}} --}}
                            <div id='discourse-comments'></div>
                            <meta name='discourse-username' content='eviltrout'>
                            <script type="text/javascript">
                                DiscourseEmbed = {

                                    discourseUrl: 'https://discourse-1-0.cloudclusters.net/',
                                    discourseEmbedUrl : 'https://www.mydomain.com{{ post.url }}',
                                    discourseReferrerPolicy: 'strict-origin-when-cross-origin'
                                    //topicId: '25'
                                };
                                (function () {
                                    console.log("DiscourseEmbed", DiscourseEmbed);
                                    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>
                            {{!-- {{/has}} --}}
                        </div>
                    </div>
                    {{/post}}

                </div>
            </section>

Ghost post.hbs Dateicode unter dem Kommentar eingefügt: Screenshot by Lightshot
Und das sind meine Embedded-Einstellungen: Screenshot by Lightshot

=====

Ich bekomme den allersten Kommentar als aufgelistet (Screenshot by Lightshot).
Wie kann ich diesen entfernen?

Es wird kein Beitrag im Discourse-Thema gepostet, nur der ursprüngliche Beitragslink: Screenshot by Lightshot

Weiß jemand, wie ich den Inhalt meines Blogs in dieses Thema posten kann? Genau wie OP.

Was tun, wenn immer „Diskussion wird geladen“ angezeigt wird?

Versuchen Sie, die Web-Inspektion Ihres Browsers im Konsolen-Tab zu öffnen und nach Fehlern zu suchen. Wenn Sie die Fehler hier posten, kann Ihnen vielleicht jemand helfen.

Öffnen Sie auch die Web-Inspektion Ihres Browsers im Element-Tab und suchen Sie nach „discourse-comments“. Dies sollte ein Element im Markup hervorheben. Direkt unter dem <div>-Element mit der ID „discourse-comments“ sollte sich ein <script>-Tag befinden. Schauen Sie sich den Inhalt dieses Tags auf offensichtliche Fehler an.

Vielleicht sollten Sie zuerst prüfen, ob der Host-Eintrag, den Sie für die Domain in Discourse konfiguriert haben, Beiträge in einer öffentlichen Kategorie veröffentlicht.

Wenn Sie versuchen, Beiträge in einer geschützten Kategorie oder auf einer Discourse-Seite zu veröffentlichen, die eine Anmeldung erfordert, um Inhalte anzuzeigen, werden Sie wahrscheinlich Fehler erhalten.

2 „Gefällt mir“

Danke Simon für deine Hilfe.

Die Konsole startete leer, aber nach einer Weile zeigt sie diesen Fehler an:

Bearbeiten:
Nach viel Fehlersuche habe ich festgestellt, dass ich “www.” in die discourseEmbedUrl aufnehmen musste.

3 „Gefällt mir“

Hallo zusammen! Ein paar Fragen:

  1. Hat jemand eine Idee, warum die Option „Importierte Themen werden nicht gelistet, bis es eine Antwort gibt“ jedes Mal wieder aktiviert wird, wenn ich auf „Einbettungseinstellungen speichern“ klicke, auch nachdem ich sie deaktiviert habe?

  1. Wenn ich einen Blogbeitrag in Chrome ansehe, sehe ich Folgendes, wo die eingebetteten Discourse-Kommentare angezeigt werden sollten:

Und in Safari gibt es in diesem Bereich nur einen leeren/weißen Block, ohne jegliche Meldung.

Ich bin in beiden Browsern in der Discourse-Installation angemeldet, während ich dies teste. Der Blog befindet sich auf einer anderen Domain als die Discourse-Installation.

Vielen Dank im Voraus!

Ich weiß nicht, warum das passieren sollte. Was passiert, wenn Sie auf die Seite mit den Website-Einstellungen gehen und den Wert der Website-Einstellung embed unlisted ändern?

Diese Einstellung und die Einstellung „Importierte Themen werden nicht aufgelistet…“ sollen sich gegenseitig widerspiegeln.

Solange Sie die Themen nicht in einer privaten Discourse-Kategorie einbetten, sollte es kein Problem sein, dass sich der Blog auf einer anderen Domain als Discourse befindet.

Der Fehler, den ich in diesem Blogbeitrag sehe (Break Out Of Your Workout Rut With 8 AMRAP Fitness Challenges) ist:

Refused to frame 'https://community.irla.co/' because an ancestor violates the following Content Security Policy directive: "frame-ancestors 'self' https://antsylabs.com https://antsylabs.com".

Haben Sie die vollständige Domain (einschließlich www) im Host-Eintrag Ihrer Discourse-Site eingestellt? Es sieht so aus, als hätten Sie nur antsylabs.com zu dieser Einstellung hinzugefügt.

2 „Gefällt mir“

Das war das Problem, danke!

Sie haben absolut Recht. Ich hatte das ‘www’ aus diesem Eintrag weggelassen, und wenn ich es zum Host-Eintrag hinzufüge, werden die eingebetteten Kommentare perfekt angezeigt.

Vielen Dank für Ihre Hilfe! Ich weiß das wirklich zu schätzen.

1 „Gefällt mir“

Ist es möglich, die eingebetteten Kommentare in umgekehrter chronologischer Reihenfolge anzuzeigen (neueste zuerst, älteste zuletzt)?

Das ist derzeit nicht möglich. Es wäre großartig, wenn eingebettete Kommentare vom Benutzer wählbare Optionen zum Filtern von Kommentaren anzeigen würden. Zum Beispiel „alle“, „neueste“, „beste“.

2 „Gefällt mir“

Kann es sein, dass der Crawler deutsche Umlaute wie Ä, Ö, Ü nicht verarbeiten kann? Titel wie „Ich würde“ enden in „Ich würde“.

Ich habe einige Fragen und würde mich freuen, wenn mir jemand helfen könnte.

Ich versuche, Kommentare auf einer NextJS-Website mit statischen Exporten einzubetten, d. h. wenn die Website live ist, sind alle Seiten vorab generiert. Obwohl ich anderswo gelesen habe, dass Discourse keine SPAs scrapen kann, verstehe ich, dass es meine Website handhaben können sollte.

Stellen wir uns vor, mein Forum ist unter forum.domain.com und meine Website, auf der ich Kommentare einbetten möchte, ist unter site.domain.com. Wir haben alle Skripte für Kommentare hinzugefügt und sehen ein ewiges „Diskussion wird geladen“ in einem iFrame.

Wenn ich von Safari aus öffne, sehe ich die folgende Fehlermeldung in der Konsole:

Unable to post message to https://forum.domain.com. Recipient has origin https://site.domain.com.

Das scheint ein CORS-Problem zu sein, aber ich habe sowohl site.domain.com als auch www.site.domain.com zu den Einbettungseinstellungen meiner Discourse-Instanz hinzugefügt.

Aus irgendeinem Grund sehe ich diese Fehlermeldung nicht in der Firefox-Konsole, sondern nur

Und schließlich, wenn ich zu https://forum.domain.coom/embed/comments?embed_url=https%3A%2F%2Fsite.domain.com%2Fpath%2Fto%2Fpage gehe, sehe ich auch ewig “Diskussion wird geladen”. Das lässt mich vermuten, dass das Problem irgendwie bei Discourse liegt und nicht bei meiner Website. Es sei denn, ich missverstehe, wie Einbettungen funktionieren. Wenn also jemand einen Rat hat, wäre ich sehr dankbar.

Was interessant ist und vielleicht damit zusammenhängt, ist, dass ich Einbettungen auf zwei Arten von Seiten hinzugefügt habe: site.domain.com/path/to/page und site.domain.com/longer/path/to/page, und ich habe der Startseite kein Kommentartag hinzugefügt. Aber in meinem Discourse sehe ich ein Thema, das der Startseite von site.domain.com gewidmet ist, das aus irgendeinem Grund jedes Mal aktualisiert zu werden scheint, wenn ein Benutzer eine Website besucht.

image

Es hat jetzt also eine unglaubliche Anzahl von Bearbeitungen. Ein Teil des eingebetteten Textes enthält eine E-Mail-Adresse, die in Discourse als [email protected] gerendert wird, und alle Bearbeitungen werden so angezeigt, als würden sie diesen Teil ändern.

1 „Gefällt mir“

Hallo!

Ich hätte gerne Ihre Meinung zu diesem „Fehler“: Embed: dates are not localized - #9 by weber-s

Wäre es sinnvoll, eine Einstellung für die Lokalisierung von Datumsangaben zu haben? Denn im Moment ist sie auf Englisch, ohne Möglichkeit zur Anpassung.

Wir haben ein Szenario, in dem es nicht gut aussieht, wenn Leute Bilder/Screenshots in ihren Beiträgen teilen, die auf einer anderen Seite eingebettet sind.

Was wäre eine gute Lösung, um Bilder in Beiträgen zu verbergen, die auf einer anderen Website eingebettet sind?

1 „Gefällt mir“

Für diese Funktion gibt es einen eigenen CSS-Tab in Themes, daher ist das Ausblenden von Bildern im Beitragsinhalt mit CSS der schnellste Weg, dies zu erreichen.

1 „Gefällt mir“