Vale… sigo en mi búsqueda para que mi servidor de anuncios se muestre en Discourse. Me he topado con este misterio que no logro resolver. Usando la función de edición de temas, he añadido mi solicitud de script tanto a </body> como a ‘footer’.
Si se añade al ‘footer’ (o ‘después del encabezado’), el código falla. Aunque en el modo de inspección el texto codificado parece correcto. Véase a continuación:
He intentado añadir esto al campo de datos de los Anuncios de la Casa y, de nuevo, el texto forma parte de los datos codificados en la página, pero no hay nada.
Tampoco parezco poder hacer que mis anuncios de Adsense funcionen por sí solos aún, pero quizás el problema está de su lado y simplemente aún no han escaneado el sitio para ver qué mostrar. Es extraño que esté tardando tanto, sin embargo.
¿Podría pedirle a un moderador que mueva esto a la categoría de soporte o a la que mejor encaje? Lo dejé sin categorizar.
Gracias. Y disculpen que sea tan insistente con esto, pero me acerco a la fecha límite de implementación y necesito resolver este problema con urgencia.
Bien, noté que el registro de CSP indicaba que el script de Google Ads estaba siendo bloqueado, así que agregué
https://pagead2.googlesyndication.com
a la lista de script-src de CSP y, a continuación, mis anuncios de Google AdSense comenzaron a aparecer (me sorprendió un poco que aún haya que hacer esto incluso con el plugin de AdSense instalado). Sin embargo, lo que noté es que, con mis anuncios propios configurados al 100% (de modo que solo se llama a mi script), no recibo NINGUNA notificación en CSP de que haya un problema. Esto me deja de nuevo confundido. El código de los anuncios propios está en el HTML (codificado) y aparece como se muestra arriba en la vista de inspección del navegador.
¿Hay algo que esté bloqueando la salida sin activar una advertencia de CSP?
La salida utiliza document.write para crear el espacio publicitario. Supongo que esa es la causa. La salida se ve así:
Así que… todo esto está relacionado con CSP (asumo), ya que el sitio está configurado con ‘unsafe-inline’ y estoy intentando cargar el script de mi servidor de anuncios mediante una URL con variables. Lo sé… qué salvajismo el mío.
¿Alguien? ¿Hay una solución sencilla para esto o debería simplemente rendirme?
La solución adecuada es no usar inline y reescribirla para conectar con los outlets de plantillas existentes de EmberJS. Si buscas una solución rápida, puedes desactivar la CSP en la configuración del sitio mientras trabajas en los cambios para tu solución de anuncios personalizada. Ten en cuenta que esto podría exponerte a ataques XSS.
También, ¿dónde se declara la Política de Seguridad de Contenidos? No veo ninguna etiqueta meta para ello. ¿Se trata simplemente de los ajustes predeterminados de HTML 5 asumidos por cada navegador?
Gracias, Falco. En lugar de desactivar toda la protección, ¿existe alguna forma de incluir en la lista blanca cadenas de datos solo para la URL del servidor de anuncios y permitir el paso de esas variables? O… ¿simplemente desactivar el requisito de ‘unsafe-inline’ de datos?
Por desgracia, no veo esa opción detallada en el artículo que enlazaste.
Y aun así, el anuncio no se muestra en la sección principal del sitio, solo en el pie de página, donde está instalado en el tema dentro de </body>. Me di cuenta de que hay un envoltorio <noscript> alrededor de la sección central, mientras que el del pie de página está fuera del cierre de </noscript>, ¿quizás por eso?
Lo verifiqué en Firefox y ahora mi consola no muestra advertencias de CSP. No estoy seguro de por qué nunca las vi en Chrome desde el principio.
Discourse es una aplicación de una sola página (SPA) y todo el marcado de la página se genera del lado del cliente mediante nuestra aplicación EmberJS.
El uso de manipulación directa del DOM, como document.write, entra en conflicto directo con todo el sistema y tiene muy pocas posibilidades de “funcionar sin problemas”.
Recomendaría intentar adaptar tu sistema de anuncios para utilizar nuestro sistema de Anuncios internos en el plugin oficial de anuncios. Podrías tener un solo anuncio en el inventario de anuncios internos y usar el ganchos de cambio de página para contactar al servidor de anuncios y reemplazar el anuncio con la respuesta. ¿O quizás tu sistema de anuncios puede escribir directamente en el inventario de anuncios internos a través de la API?
Gracias por la ayuda, Falco. Es un poco aterrador, pero el código de este servidor de anuncios se escribió antes de que se creara el término API, así que… sí, probablemente me convendría escribir un sistema de servidor de anuncios completamente nuevo desde cero. Simplemente no tengo tiempo para eso ahora mismo, ya que estoy desplegando este nuevo foro y más de 6 nuevos sitios de contenido.
Voy a probar algunas alternativas al uso de document.write y veré si eso puede funcionar.