"Abrir links externos em nova aba por padrão" não funciona

Olá,

Ultimamente, todos os links externos no meu fórum deixaram de abrir em uma nova aba. Verifiquei novamente a opção “abrir links externos em uma nova aba por padrão” e ela está marcada:

Verifiquei o HTML por trás dos links usando o inspecionar elemento e target="_blank" claramente está ausente.

O que devo fazer?

Você já tentou isso no modo de segurança? Talvez um novo tema, componente de tema ou plugin esteja interferindo? :face_with_monocle:

Tentei o site no modo de segurança, mas o problema continua o mesmo.

Qual versão do Discourse você está executando? Será mais fácil verificar se consigo replicar.

Estou executando a versão mais recente 2.7.0.beta1

Você pode testar isso aqui no Meta? Configure suas preferências aqui para abrir links externos em uma nova aba e veja se funciona para você. Funciona muito bem para mim.

Olá @riteshsaini

Uma das melhores opções iniciais para solução de problemas seria examinar o DOM diretamente usando o console de desenvolvedor web; e inspecionar quais são os atributos exatos do seu link, em particular, o atributo “target”.

Muitas vezes, você não consegue ver esses atributos do DOM lendo diretamente o código-fonte (esses atributos podem existir no DOM, mas não no código-fonte), então você precisará consultar o DOM para obter os atributos (para ter 100% de certeza).

Espero que isso faça sentido.

Acredito que foi isso que ele fez aqui

Não. Ler o código-fonte não é o mesmo que verificar o DOM.

Os atributos do DOM podem ser diferentes (e frequentemente são) do código-fonte; especialmente em sites que usam muito JavaScript para manipular o DOM (como o Discourse).

É por isso que mencionei especificamente consultar o DOM e não apenas olhar o código-fonte :slight_smile:

No entanto, concordo com você, @osioke, que o código-fonte mostra claramente que o atributo target está ausente; mas ao verificarmos o DOM, teremos a “certeza” de qual é o atributo; já que o DOM pode estar em um estado diferente do código-fonte (e frequentemente está).

Pessoalmente, sou um grande fã de “nunca assumir nada”, e é por isso que sugeri que @riteshsaini “tivesse certeza” verificando o DOM e depois “prosseguisse a partir daí”.

É altamente provável que os atributos de destino dos links no DOM e no código-fonte estejam no mesmo estado; mas sempre recomendo que as pessoas que estão solucionando problemas não assumam esse tipo de detalhe; daí minha sugestão de consultar o DOM como uma etapa de solução de problemas.

Espero que isso ajude.

Em vez de ajustar nas configurações, uso este método

Demo: Theme Creator

<script type="text/discourse-plugin" version="0.8">
    api.onPageChange((url, title) => {
        // Abrir automaticamente links externos em nova aba ou janela
        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>

… e ilustrando perfeitamente em um exemplo sólido da API do Discourse como o DOM e o código-fonte estarão em estados diferentes, e você não verá os atributos de destino no código HTML definidos pelo JS acima :slight_smile:

@Bcat, obrigado por compartilhar este trecho. Mas onde devo adicioná-lo?

PS: desculpe pela pergunta boba. Não sou programador e estou totalmente novo no Discourse :slight_smile:

Olá @neounix, obrigado pela sua resposta.

Não tenho muita certeza de como fazer isso :slight_smile: se você tiver um tempinho, me explique como faço.

Ver tópico: Installing a theme or theme component

discourse-automatically-open-external-links-in-new-tab.zip|anexo (843 Bytes)

Você verificou as configurações do seu perfil pessoal em preferences/interface? Geralmente, essa situação ocorre quando a abertura de links externos em novas abas está desabilitada no seu perfil pessoal.

Estava desmarcado, então eu marquei. Agora, os links abrem em uma nova aba apenas quando estou logado. Se eu verificar o site em uma aba anônima, ainda não funciona.

Funciona exatamente como deveria. Perfeitamente! Muito obrigado :slight_smile:

Existe alguma solução para adicionar rel="nofollow" a todos os links externos, mesmo aqueles adicionados pelo administrador?

Tenho me esforçado para fazer isso há meses.

Para fóruns de compartilhamento e download usando links do Bitly ou outros sites (menos seguros),
você consideraria usar rel="noopener noreferrer" em vez de rel="nofollow"?
Você pode saber mais sobre noopener noreferrer.

Posso considerar adicionar noopener noreferrer, mas ainda precisarei adicionar nofollow junto com eles. O problema é que não quero que o Google siga ou indexe esses links, pois são links de afiliado. Apenas nofollow pode ajudar nisso.

Adicione links[i].rel = 'nofollow'; ou Arquivo: discourse-automatically-open-external-links-in-new-tab.zip (856 Bytes)