"Apri i link esterni in una nuova scheda per impostazione predefinita" non funziona

Ciao,

Ultimamente, tutti i collegamenti esterni sul mio forum hanno smesso di aprirsi in una nuova scheda. Ho ricontrollato l’opzione “apri i collegamenti esterni in una nuova scheda per impostazione predefinita” ed è selezionata:

Ho esaminato l’HTML dei collegamenti tramite l’ispezione dell’elemento e manca chiaramente target="_blank".

Cosa dovrei fare?

1 Mi Piace

L’hai provato in modalità provvisoria? Forse un nuovo tema, un componente del tema o un plugin sta interferendo? :face_with_monocle:

2 Mi Piace

Ho provato il sito in modalità provvisoria, ma il problema persiste.

Quale versione di Discourse stai utilizzando? Sarà più facile vedere se riesco a replicare il problema.

Sto eseguendo l’ultima versione 2.7.0.beta1

Puoi provarlo qui su Meta? Imposta le tue preferenze qui per aprire i link esterni in una nuova scheda e verifica se funziona per te. Per me funziona molto bene.

1 Mi Piace

Ciao @riteshsaini,

Una delle prime e migliori opzioni per la risoluzione dei problemi sarebbe esaminare direttamente il DOM utilizzando la console per sviluppatori web; ispezionare quali sono gli attributi esatti del tuo link, in particolare l’attributo “target”.

Spesso non è possibile vedere questi attributi del DOM leggendo direttamente il codice sorgente (questi attributi possono esistere nel DOM ma non nel codice sorgente), quindi dovrai interrogare il DOM per ottenere gli attributi (per essere sicuro al 100%).

Spero che questo abbia senso.

2 Mi Piace

Credo che sia quello che ha fatto qui

No. Leggere il codice sorgente non è la stessa cosa che verificare il DOM.

Gli attributi del DOM possono essere diversi (e spesso lo sono) rispetto al codice sorgente; specialmente sui siti web che utilizzano molto JavaScript per manipolare il DOM (come Discourse).

Per questo ho specificato di interrogare il DOM e non limitarsi a guardare il codice sorgente :slight_smile:

Tuttavia, sono d’accordo con te @osioke: il codice sorgente mostra chiaramente l’attributo target mancante; ma quando verifichiamo il DOM, saremo “certi” di quale sia l’attributo, poiché il DOM può trovarsi in uno stato diverso rispetto al codice sorgente (e spesso lo è).

Personalmente, sono un grande sostenitore del “non assumere mai nulla”, ed è per questo che ho suggerito a @riteshsaini di “assicurarsi” verificando il DOM e poi “procedere di conseguenza”.

È molto probabile che gli attributi target dei link nel DOM e nel codice sorgente siano nello stesso stato; ma raccomando sempre a chi risolve problemi di non dare per scontati dettagli di questo tipo; da qui il mio suggerimento di interrogare il DOM come passo di risoluzione dei problemi.

Spero che questo aiuti.

2 Mi Piace

Invece di modificare le impostazioni, uso questo metodo

Demo: Theme Creator

<script type="text/discourse-plugin" version="0.8">
    api.onPageChange((url, title) => {
        // Apri automaticamente i collegamenti esterni in una nuova scheda o finestra
        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 Mi Piace

… e illustrando perfettamente in un solido esempio di API Discourse come il DOM e il codice sorgente si troveranno in uno stato diverso, e non vedrai gli attributi di destinazione nel codice HTML impostati dal JS sopra :slight_smile:

2 Mi Piace

@Bcat grazie per aver condiviso questo frammento. Ma dove dovrei inserirlo?

PS: scusa per la domanda sciocca. Non sono un programmatore e sono totalmente nuovo a Discourse :slight_smile:

1 Mi Piace

Ciao @neounix, grazie per la risposta

Non sono davvero sicuro di come farlo :slight_smile: illuminami su questo se hai un po’ di tempo libero.

1 Mi Piace

Visualizza argomento: Installing a theme or theme component

discourse-automatically-open-external-links-in-new-tab.zip|allegato (843 Byte)

1 Mi Piace

Hai controllato le impostazioni nel tuo profilo personale sotto preferences/interface? Perché di solito questa situazione si verifica quando nel tuo profilo personale l’apertura dei link esterni in nuove schede è disabilitata.

3 Mi Piace

Era deselezionato, quindi l’ho selezionato. Ora i collegamenti si aprono in una nuova scheda solo quando sono connesso. Se controllo il sito in una scheda in incognito, non funziona ancora.

1 Mi Piace

Funziona esattamente come dovrebbe. Perfettamente! Grazie mille :slight_smile:

Esiste una soluzione per aggiungere rel="nofollow" a tutti i link esterni, anche a quelli aggiunti dagli amministratori?

Sto cercando di farlo da mesi ormai.

1 Mi Piace

Per i forum dedicati alla condivisione e al download tramite link esterni come Bitly o altri siti (meno sicuri),
valuteresti di utilizzare rel="noopener noreferrer" invece di rel="nofollow"?
Puoi saperne di più su noopener noreferrer

1 Mi Piace

Potrei considerare di aggiungere noopener noreferrer, ma dovrò comunque includere anche nofollow. Il punto è che non voglio che Google segua o indicizzi quei link, poiché si tratta di link di affiliazione. Solo nofollow può aiutare in questo.

1 Mi Piace

Aggiungi links[i].rel = 'nofollow'; o File: discourse-automatically-open-external-links-in-new-tab.zip (856 Byte)

1 Mi Piace