"Abrir enlaces externos en una nueva pestaña por defecto" no funciona

Hola,

Últimamente, todos los enlaces externos en mi foro han dejado de abrirse en una nueva pestaña. He verificado dos veces la opción «abrir enlaces externos en una nueva pestaña por defecto» y está marcada:

He revisado el HTML detrás de los enlaces mediante la herramienta de inspección de elementos y claramente falta target="_blank".

¿Qué debo hacer?

1 me gusta

¿Lo has probado en modo seguro? ¿Quizás un tema, un componente de tema o un plugin nuevo esté interfiriendo? :face_with_monocle:

2 Me gusta

Probé el sitio en modo seguro, pero el problema persiste.

¿Qué versión de Discourse estás ejecutando? Será más fácil ver si puedo replicarlo.

Estoy ejecutando la última versión 2.7.0.beta1

¿Puedes probar esto aquí en Meta? Configura tus preferencias aquí para abrir los enlaces externos en una nueva pestaña y ver si funciona para ti. Funciona bastante bien para mí.

1 me gusta

Hola @riteshsaini

Una de las mejores opciones para empezar a solucionar el problema sería examinar el DOM directamente usando la consola de desarrollo web; y revisar cuáles son los atributos exactos de tu enlace, en particular, el atributo “target”.

A menudo, no puedes ver estos atributos del DOM leyendo directamente el código fuente (estos atributos pueden existir en el DOM pero no en el código fuente), por lo que necesitarás consultar el DOM para obtener los atributos (para estar 100% seguro).

Espero que esto tenga sentido.

2 Me gusta

Creo que eso es lo que hizo aquí

No. Leer el código fuente no es lo mismo que verificar el DOM.

Los atributos del DOM pueden ser diferentes (y a menudo lo son) que los del código fuente; especialmente en sitios web que utilizan mucho JavaScript para manipular el DOM (como Discourse).

Por eso mencioné específicamente consultar el DOM y no simplemente mirar el código fuente :slight_smile:

Sin embargo, estoy de acuerdo contigo @osioke en que el código fuente muestra claramente que falta el atributo target; pero cuando verificamos el DOM, estaremos “seguros” de cuál es el atributo; ya que el DOM puede estar en un estado diferente al del código fuente (y a menudo lo está).

Personalmente, soy un gran defensor de “nunca asumir nada”, por lo que sugerí que @riteshsaini “se asegurara” verificando el DOM y luego “procediera desde allí”.

Es muy posible que los atributos de destino de los enlaces en el DOM y en el código fuente estén en el mismo estado; pero siempre recomiendo a quienes solucionan problemas que no asuman este tipo de detalles; de ahí mi sugerencia de consultar el DOM como paso de solución de problemas.

Espero que esto ayude.

2 Me gusta

En lugar de ajustar en la configuración, uso este método

Demo: Theme Creator

<script type="text/discourse-plugin" version="0.8">
    api.onPageChange((url, title) => {
        // Abrir automáticamente los enlaces externos en una nueva pestaña o ventana
        var pc = 1;
        if ($("html").hasClass("mobile-device")) pc = 0;
        var links = document.links;
        for (var i = 0, linksLength = links.length; i < linksLength; i++) {
            if (links[i].hostname != window.location.hostname) {
                if (pc) links[i].target = '_blank'; else links[i].target = '_self';
            }
        }
    });
</script>
2 Me gusta

… y lo ilustra perfectamente en un ejemplo sólido de la API de Discourse, mostrando cómo el DOM y el código fuente estarán en un estado diferente y no verás los atributos de destino en el código HTML establecidos por el JS anterior :slight_smile:

2 Me gusta

@Bcat, gracias por compartir este fragmento. Pero, ¿dónde debería agregarlo?

PD: perdona por la pregunta tonta. No soy programador y soy totalmente nuevo en Discourse :slight_smile:

1 me gusta

Hola @neounix, gracias por tu respuesta

No estoy muy seguro de cómo hacer eso :slight_smile: Ilumíname al respecto si tienes un poco de tiempo libre.

1 me gusta

Ver tema: Installing a theme or theme component

discourse-automatically-open-external-links-in-new-tab.zip|adjunto (843 bytes)

1 me gusta

¿Has revisado la configuración de tu perfil personal en preferences/interface? Porque generalmente esta situación se produce cuando en tu perfil personal está deshabilitada la apertura de enlaces externos en nuevas pestañas.

3 Me gusta

Estaba desmarcado, así que lo marqué. Ahora abre los enlaces en una nueva pestaña solo cuando estoy conectado. Si reviso el sitio en una pestaña de incógnito, aún no funciona.

1 me gusta

Funciona exactamente como debería. ¡Perfectamente! Muchas gracias :slight_smile:

¿Hay alguna solución para añadir rel="nofollow" a todos los enlaces externos, incluso a los que añade el administrador?

Llevo meses intentando hacerlo sin éxito.

1 me gusta

Para foros de intercambio y descarga que utilizan enlaces de Bitly o sitios externos (menos seguros), ¿considerarías usar rel="noopener noreferrer" en lugar de rel="nofollow"?
Puedes obtener más información sobre noopener noreferrer.

1 me gusta

Puedo considerar añadir noopener noreferrer, pero seguiré necesitando añadir nofollow junto con ellos. El caso es que no quiero que Google siga o indexe esos enlaces, ya que son enlaces de afiliados. Solo nofollow puede ayudar con eso.

1 me gusta

Añade links[i].rel = 'nofollow'; o Archivo: discourse-automatically-open-external-links-in-new-tab.zip|adjunto (856 bytes)

1 me gusta