Como meu navegador sabe que eu visitei uma página se o URL está redirecionando?

5

Como o Chrome, Safari, Firefox ou outros navegadores sabem que você visitou o URL de destino de um link de redirecionamento?

Sempre achei interessante que os navegadores saibam o URL que uma URL redirecionadora acessa e aplique o estilo visitado ao link.

Para entender o que estou perguntando:

  • Digite uma palavra-chave aleatória no Google.
  • Encontre um link azul no resultado da pesquisa. Não clique nele.
  • Copie o URL de destino (geralmente escrito em verde abaixo do link).
  • Abra uma nova janela / guia e cole o URL de destino na barra de endereços e pressione Enter .
  • Volte para os resultados de pesquisa do Google e imediatamente o link será visitado e ficará roxo.

No entanto, o link é para alguns google.com/url... page. Existe algo que o Google coloca em sua marcação para dizer ao navegador qual URL afiliar o histórico do link ou algo do tipo? Os navegadores simplesmente leem os resultados da pesquisa do Google de uma determinada maneira?

    
por henryaaron 31.03.2013 / 04:11

1 resposta

6

Se você prestar atenção na barra de status ao passar o link, verá que inicialmente aponta para o URL "limpo".

Somente quando você clica no link (com qualquer um dos três botões do mouse), é acionado um evento JavaScript que altera o destino do link para o redirecionamento de URL do Google.

Para confirmar minha reivindicação, basta clicar com o botão direito do mouse em qualquer um dos links roxos e fechar o menu de contexto. A menos que você já tenha visitado o site a partir dos resultados de pesquisa do Google, você verá que ele muda de cor. 1

Eu não sei exatamente como o Google injeta a URL de redirecionamento 2 , mas a ideia geral é esta:

// define a function 'f' that changes a link's clean URL to a redirection URL
var f = function () {
    // prepend 'http://www.google.com/url?rct=j&url=' to the link's target
    this.href = 'http://www.google.com/url?rct=j&url=' + escape(this.href);
    // don't invoke this function anymore when clicking the link
    this.removeEventListener('click', f);
    // don't invoke this function anymore when right-clicking the link
    this.removeEventListener('contextmenu', f);
}

// save all <a> tags in an array 'a'
var a = document.getElementsByTagName('a');

// for each <a> tag in the array 'a'
for (var i = 0; i < a.length; i++) {
    // execute function 'f' when clicking the link
    a[i].addEventListener('click', f);
    // execute function 'f' when right-clicking the link
    a[i].addEventListener('contextmenu', f);
}

Você pode tentar este jsFiddle para ver como funciona.

1 Testado no Chromium 25 (Ubuntu 12.10) e no Chrome 26 (Windows 7)

2 JavaScript minimizado é um pouco difícil de ler.

    
por 31.03.2013 / 05:00