Wie man zwischen Dunkelmodus und hellem Weißmodus in eingebettetem Discourse wechselt

Meine Website bietet die Schaltfläche für den Dunkelmodus. Wenn also auf die Schaltfläche geklickt wird, muss ich das Farbschema von Discourse-Einbettungen ändern, um es mit meiner Website konsistent zu halten.

Aber als ich versuchte, der body-Klasse des eingebetteten iframes eine Klasse hinzuzufügen, stellte ich fest, dass iframe.contentDocument immer null ist, und wenn ich document.getElementById("discourse-embed-frame").contentWindow.document verwende, erhalte ich den folgenden Fehler:

Ich denke, es muss eine Möglichkeit geben, den eingebetteten Frame so zu konfigurieren, dass Cross-Origin-Anfragen zugelassen werden, aber ich habe nach einigen Versuchen noch keine Konfiguration gefunden.

Der andere Weg wäre die Verwendung von postMessage, wie z. B. document.getElementById("discourse-embed-frame").contentWindow.postMessage("darkMode"), aber dafür müsste ein Handler vorhanden sein, der die darkMode-Nachricht im Skript verarbeitet. Ich habe noch nicht herausgefunden, wo ich ihn hinzufügen kann.

Ich habe eine ähnliche Herausforderung. Konnten Sie eine Lösung finden?

Aufgrund des Cross-Origin-Problems kann ich keine Art von Marker auf dem Iframe hinzufügen, den mein eingebettetes CSS verwenden kann, um herauszufinden, welche Farben verwendet werden sollen:

Noch nicht gelöst. Ich habe auch keine offizielle Antwort erhalten, daher weiß ich nicht, ob alle offiziellen Freunde im Urlaub sind.

1 „Gefällt mir“

(Freundliches Anstoßen, um zu sehen, ob wir offizielle Anleitungen haben :slight_smile: )

1 „Gefällt mir“

Es gibt eine offizielle Methode, aber nur für offizielle Themes: Styling of Embedded Discourse

Das könnte helfen:

Ich habe die neueste offizielle Funktion implementiert.
Wenn Sie noch weitere Anforderungen haben, können Sie sich auf Folgendes beziehen: