No se puede encontrar un elemento a través de JavaScript que sí existe

Hola,

Intenté crear un script para obtener el atributo background-image del encabezado del perfil y luego guardarlo como una variable raíz. Sin embargo, mi código no funciona. Probé muchas soluciones, algunas de ellas incluían IA, que simplemente revirtieron la versión del plugin y no ayudaron.

Este es el código:

<script type="text/discourse-plugin" version="0.9">
    const setRootBgImage = () => {
        try {
            const el = document.getElementByClassName('.user-profile-image');
            if (el) {
                const bgImage = window.getComputedStyle(el).getPropertyValue('background-image');
                document.documentElement.style.setProperty('--profile-bg-img', bgImage);
            }
        } catch (error) {
            console.error(error);
            debugger; // cuando se ejecuta, esto siempre aparece sin importar qué y muestra el mismo error
        }

    };

    const shouldRun = () => {
        return window.location.pathname.startsWith('/u/');
    };

    const init = () => {
        if (shouldRun()) {
            setRootBgImage();
        }
    };

    document.addEventListener('DOMContentLoaded', init);

    api.onPageChange(() => {
        init();
    });
</script>

Gracias.

2 Me gusta

Tu script se está cargando antes de que se renderice la mayor parte de la página, por lo que no puede encontrar el elemento…

Esto debería darte lo que buscas…

<script type="text/discourse-plugin" version="0.9">
api.onPageChange(() => {
  let currentRouteParent = api.container.lookup("router:main").currentRoute?.parent;
    if (currentRouteParent.name.includes("user")) {
        let userBg = currentRouteParent.attributes.profile_background_upload_url;

        if (userBg) {
            document.documentElement.style.setProperty('--profile-bg-img', userBg);
        } else {
            document.documentElement.style.removeProperty('--profile-bg-img');
      }
    }
});
</script>

Supongo que estás intentando reutilizar el fondo del perfil del usuario en la página de perfil, ¿en algún lugar? de lo contrario, esto no permanecerá si navegas desde un perfil y actualizas la página…

2 Me gusta

¡Eso funcionó! Parece que el CSS no lo hizo.
image

1 me gusta

Ah, claro, lo que querrás hacer es añadir la parte url() al valor de la propiedad personalizada… algo como:

document.documentElement.style.setProperty('--profile-bg-img', `url(${userBg})`);
1 me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.