¿Cómo cambiar entre el modo oscuro y el modo blanco brillante en Discourse incrustado?

Mi sitio web proporciona el botón de modo oscuro, por lo que cuando se hace clic en el botón, necesito cambiar el tema de color de los Embebecimientos de Discourse para que coincida con mi sitio web.

Pero cuando intento agregar una clase al body del iframe incrustado, encuentro que iframe.contentDocument es siempre nulo, y si uso document.getElementById("discourse-embed-frame").contentWindow.document, el error es el siguiente:

Creo que debería haber una manera de configurar el marco incrustado para permitir el origen cruzado, pero todavía no he encontrado cómo configurarlo después de probar algunas configuraciones.

La otra forma podría ser usar postMessage, como document.getElementById("discourse-embed-frame").contentWindow.postMessage("darkMode"), pero se necesita un manejador para procesar el mensaje darkMode en el script, aún no he encontrado dónde agregarlo.

Tengo un desafío similar. ¿Pudiste encontrar una solución alternativa?

Debido al problema de origen cruzado, no puedo agregar ningún tipo de marcador en el iframe que mi CSS incrustado pueda usar para determinar qué colores usar:

Aún no se ha resuelto. Tampoco he recibido una respuesta oficial, así que no sé si todos los amigos oficiales están de vacaciones.

1 me gusta

(Recordatorio amistoso para ver si tenemos alguna guía oficial :slight_smile: )

1 me gusta

Hay una forma oficial pero solo para temas oficiales: Styling of Embedded Discourse

Eso podría ayudar:

He implementado la última función oficial.
Si todavía tienes requisitos, puedes consultar