Inyectando JS en Hugo

2023-08-24T07:00:00+02:00 | 5 minutos de lectura | Actualizado en 2023-08-24T07:00:00+02:00

Inyectando JS en Hugo

Pues me he puesto a hacer cosas de javascript y quería meterlo dentro del blog hecho con gohugo que estáis leyendo.

De hecho, ya hice algo parecido para inyectar los códigos de iVoox, tal como llevo haciendo desde hace años.

Preparando el como

Bueno básicamente ya sabéis, programar.
Si no, pues poco se puede hacer.

Y ahora a inyectar

Bueno, pues la idea que se ma ha ocurrido es hacerlo como global, pero ¿para qué?
Es decir ¿Tiene sentido?
Pues no, y es que no quiero sobrecargar cada una de las páginas con contenido que no le viene al caso.
Y entonces recordé que hay una funcionalidad que inyecta código bajo demanda, es decir, que no inyecta sin invocarlo.

Shortcodes

En la documentación aparece una descripción de la funcionalidad pero no habla más que de expandir códigos y demás.
No es lo que busco pero me sirve.
Ademas es la chapu que es menos chapu de todo lo que podía hacer, dado que no hay muchas más opciones,

Proyecto
├── content
├── layouts
│   └── shortcodes
│      ├── mi_codigo_js.html
├── static
├── themes
└──config.toml

Bien. Ahí tengo ya el sitio donde voy a poner el invocador.
¿Contenido?

Pues esto:

<div id="id de script">
  <script
    type="text/javascript"
    charset="utf-8"
    src="https://www.cool-funky-calculator.de/widget/calculator.js">
  </script>
</div>

Ubicación de script

El script lo podemos alojar en cualquier lugar alcanzable por el código que se va a interpretar en el cliente.
Esto quiere decir que el código tiene que estar en internet, y debe ser alcanzable desde el navegador del usuario que está viendo la página.
Esto tiene ventajas, seguro, pero es muy inseguro desde el punto de vista de la ciberseguridad, del sentido común y de mi propia imagen. Si alguien viene a visitar mi web debo al menos garantizar la seguridad de mi código, de lo que voy a hacer, mostrar y ofrecer.

Así que no, es algo a mejorar. No quiero problemas como crosssite scripting o similares. Lo debo ofrecer desde mi servidor.
Lo voy a ofrecer desde YoVirtualizador.com desde el mismo nivel que los posts, que los artículos.

Mejorando el shortcode

Pero este shortcode es muy mejorable. Muchísimo.
Si, porque a mi me interesa no tener que hacer un shortcode por cada script, y no quiero tener que mantener este shortcode entre proyectos, entre cambios de servidor, de dominio, de plantilla…
Vamos a mejorar mucho el contenido.

Lo primero a valorar es que quiero usar parámetros. Al menos uno, el nombre del script, como si de una llamada a procedimiento, a función, a objeto, se tratase.

Así que eso lo vamos a hacer, y para ello vamos a aprovechar las funciones de Hugo como generador, y una función de Go para manipular las cadenas.

En la línea donde fijamos el origen, voy a hacer 3 cosas.

  • Lo primero es que voy a aceptar un parámetro. Con index .Param 0 voy a conseguir la cadena que ocupa el primer lugar después del nombre del shortcode en la línea de Markdown desde la que se invoca el shortcode. Un efecto similar a lo que devolvería char *argc[] en lenguaje C.
  • Con printf "/scripts/js/%s" que procede directamente de Golang pero que es una sintaxis calcada a la de C lo que hago es crear una cadena en la que inyecto un literal delante del parámetro %s. Ahora cuento de donde viene esa cadena.
  • Con relURL lo que va a hacer Hugo es crear una cadena que sea literal con formato de url pero relativa al proyecto. Eso significa que será compilada y transformada en tiempo de publicación con los datos de salida, de producción, pero que en tiempo de desarrollo, el servidor de previsualización creará una url que corresponda a preproducción, o sea, en mi caso la url de herodoto en lugar de la de www.
  • Y esos símbolos, las dobles llaves, los pipes, todo eso tiene sentido.
    • Tuberías. Su uso sigue con la misma lógica que en Powershell, Bash o cualquier otro intérprete de comandos o lenguaje (salvo Lisp pero es otra guerra). Lo que va a hacer es seguir el flujo de datos como cadena. El parámetro pasa como cadena al printf, y printf envía su salida a relURL.
    • Llaves. Esto es un indicativo de segmento de código Go. Determina donde está lo que tiene que tararse como Go en lugar de texto o HTML.
  • Y el resto de parámetros y componentes clásicos de HTML. No voy comentar demasiado salvo recordar la prevalencia de los DIV.

Así que va a quedar muy mejorado. Así:

<div id="id_script_generico">
  <script
    type="text/javascript"
    charset="utf-8"
    src="{{ index .Params 0 | printf "/scripts/js/%s" | relURL }}.js">
  </script>
</div>

Puesta en marcha

Ale, ya podemos llamar a un script desde un Markdown que me permitirá poner al pié una nota en un DIV propio y sin caer fuera de mi servidor.

{ { < mi_codigo_js recursos_js_holamundo > } }  

He introducido espacios adicionales entre las llaves para que el compilador no intente invocar mi_codigo_js en este punto del documento.

Y para muestra, botón:

primera captura

Y ¿otros lenguajes?

Pues la verdad que lo he intentado pero no veo sentido usar PHP u otras cosas teniendo JS, pero con el mismo concepto, he intentado hacer PHP y he obtenido esto.

segunda captura

De momento, descartado.
No voy a convertir esto en un wordpress cualquiera.

El ejemplo


YoVirtualizador en formato podcast. Ahora también en Sospechosos Habituales: https://wt.territoriolinux.es/rss/short.xml
Y sin más, os dejo los enlaces:

Web: https://www.yovirtualizador.com
Grupo de telegram: https://t.me/grupovirtualizador
Podcast: https://www.ivoox.com/podcast-yovirtualizador_fg_f1563806_filtro_1.xml
Canal de youtube: https://www.youtube.com/channel/UC0R70cABSsmC6TFyXth0qPg
Enlace de afiliados de amazon: https://amzn.to/3gX3HmK
Enlace de referidos de la Asociación Podcast: https://www.asociacionpodcast.es/registrarse/socio/?coupon=SB6A70

© 2019 - 2025 YoVirtualizador

Tu podcast y blog de confianza

Política de comentarios

En YoVirtualizador, todos los comentarios serán bienvenidos pero moderados.

Los grupos de telegram y redes sociales tienen moderación activa. Consulta con sus administradores.

Respetos guardan respetos.

El contenido irrelevante u ofensivo será eliminado.

Acerca de YoVirtualizador

YoVirtualizador es la marca de varios proyectos

Podcast de informática profesional. Canal de Youtube sobre el blog, el podcast y de temática profesional. Blog de contenido diverso, con temática BOFH y técnica.

Gracias por la lectura.

Galletas

Política de cookies

Lo de las galletas en 2025

En YoVirtualizador no usamos cookies para nada, pero los servicios de discus y analytics recopilan datos en servidores ajenos a YoVirtualizador sin que yo pueda hacer nada. Si no quieres galletas, usa un navegador que no ejecute javascript.

Este aviso es sólo porque algún político tenía que justificar su existencia, y ahora además hay que redactar.

Legislación aplicable:

  • Reglamento (UE) 2016/679 del Parlamento Europeo y del Consejo, de 27 de abril de 2016, General de Protección de Datos (RGPD) (Aplicable desde mayo de 2018),“Establece la definición y los requisitos del consentimiento (libre, informado, específico e inequívoco) y los derechos del interesado. Es la norma principal sobre datos personales.”
  • Artículo 22 de la Ley 34/2002, de 11 de julio, de servicios de la sociedad de la información y de comercio electrónico (LSSI). Es la norma específica española sobre cookies. Establece la obligación de informar y obtener el consentimiento para el uso de dispositivos de almacenamiento y recuperación de datos (cookies) que no sean estrictamente necesarios.
  • Ley Orgánica 3/2018, de 5 de diciembre, de Protección de Datos y garantía de los derechos digitales (LOPDGDD) (Aplicable desde diciembre de 2018),Es la ley española que desarrolla y adapta el RGPD al ordenamiento jurídico español. Complementa la LSSI en lo relativo a la protección de datos personales.

Definición y función de las cookies

¿Qué son las cookies? Una cookie es un fichero que se descarga en su ordenador al acceder a determinadas páginas web. Las cookies permiten a una página web, entre otras cosas, almacenar y recuperar información sobre los hábitos de navegación de un usuario o de su equipo y, dependiendo de la información que contengan y de la forma en que utilice su equipo, pueden utilizarse para reconocer al usuario.
¿Qué tipos de cookies utiliza esta página web? Cookies propias: Son aquéllas que se envían al equipo terminal del usuario desde un equipo o dominio gestionado por el propio editor y desde el que se presta el servicio solicitado por el usuario. Cookies de terceros Son aquéllas que se envían al equipo terminal del usuario desde un equipo o dominio que no es gestionado por el editor, sino por otra entidad que trata los datos obtenidos través de las cookies. Cookies persistentes Son un tipo de cookies en el que los datos siguen almacenados en el terminal y pueden ser accedidos y tratados durante un periodo definido por el responsable de la cookie, y que puede ir de unos minutos a varios años. Cookies de análisis Son aquéllas que bien tratadas por nosotros o por terceros, nos permiten cuantificar el número de usuarios y así realizar la medición y análisis estadístico de la utilización que hacen los usuarios del servicio ofertado. Para ello se analiza su navegación en nuestra página web con el fin de mejorar la oferta informativa, productos o servicios que le ofrecemos. Cookies publicitarias Son aquéllas que permiten la gestión, de la forma más eficaz posible, de los espacios publicitarios que, en su caso, el editor haya incluido en una página web, aplicación o plataforma desde la que presta el servicio solicitado en base a criterios como el contenido editado o la frecuencia en la que se muestran los anuncios.

Asimismo es posible que al visitar alguna pagina web o al abrir algún email donde se publique algún anuncio o alguna promoción sobre nuestros productos o servicios se instale en tu navegador alguna cookie que nos sirve para mostrarte posteriormente publicidad relacionada con la búsqueda que hayas realizado, desarrollar un control de nuestros anuncios en relación, por ejemplo, con el numero de veces que son vistos, donde aparecen, a que hora se ven, etc

Ayuda con las galletas

Como algún político tenía que justificar su existencia, yo te cuento como lo vamos a hacer.

Revocación y eliminación de cookies (IA generativa dixit)

Usted puede permitir, bloquear o eliminar las cookies instaladas en su equipo mediante la configuración de las opciones del navegador instalado en su ordenador, en caso que no permita la instalación de cookies en su navegador es posible que no pueda acceder a alguna de las secciones de nuestra web.

A continuación puede encontrar como acceder a la configuración de las cookies en los principales navegadores:

  • Internet Explorer: Menú Herramientas -> Opciones de Internet -> Privacidad -> Configuración. También puede consultar el soporte de Microsoft o la Ayuda del navegador.
  • Firefox: Menú Herramientas -> Opciones -> Privacidad -> Historial -> Configuración Personalizada. También puede consultar el soporte de Mozilla o la Ayuda del navegador.
  • Chrome: Menú Configuración -> Mostrar opciones avanzadas -> Privacidad -> Configuración de contenido. También puede consultar el soporte de Google o la Ayuda del navegador.
  • Safari: Menú Preferencias -> Seguridad. También puede consultar el soporte de Apple o la Ayuda del navegador.