Pergunta

Sobre o Google e Yahoo, páginas de pesquisa, os URLs das 10 resultado da pesquisa links apontam para google.com ou yahoo.com.Os URLs que têm argumentos extras que permitem google.com ou yahoo.com para redirecionar para o real resultado da pesquisa quando o link é clicado.Quando o usuário mouse sobre o link, o resultado da pesquisa de URL (e não o google.com ou yahoo.com URL) é exibido na barra de status do navegador.

Eu estou querendo saber como eles fazem isso.

Há muitos anos atrás, teria sido realizado por ter um pouco de javascript que define janela.estado, mas que não parecem funcionar mais, como é explicado por De confiança cross-browser forma de definir texto da barra de Status

Eu tenho um link parecido com este:<a href="http://somedomain.com/ReallyLongURLThatShouldNotBeSeenInTheStatusBar" onmouseover="window.status='http://niceShourtUrl.com/'" onmouseout="window.status=''">Click Me</a>

Neste link, tentei usar a janela.status de estratégia, mas ele não funciona.Como faço para corrigir esse link de forma a que ele age como os links do Google e do Yahoo, páginas de resultado de pesquisa?Neste exemplo, eu quero "http://niceShourtUrl.com/"para ser exibido na barra de status quando o usuário mouse sobre o link.

Foi útil?

Solução

É difícil ler a fonte, mas você verá que de fato os URLs (no <a> Tags) são os URLs de destino corretos, e é por isso que a barra de status do navegador mostra o URL correto (em vez do link de rastreamento que ele redireciona quando você realmente clica). Há então alguns onclick JavaScript que pode interceptar os cliques antes que a ação padrão do navegador (seguindo o link) possa ocorrer.

Outras dicas

O Google tem onMouseDown manipuladores em cada link que alterar o link da fonte original apontando para o Google redirect.Então, onmousedown substitui o link e quando onClick aparece (logo após o onmousedown) o link está apontando já para algum lugar que a direção original.

Passo 1.O usuário clica em um link (botão do rato para baixo)

Passo 2.evento onMouseDown dispara

Passo 3.destino do link (um href valor) é alterado

Passo 4.Botão do Mouse vem

Passo 5.evento onClick dispara

Passo 6.Navegador vê que um link foi clicado e encaminha o usuário para o destino pretendido (definido por um já alterado href valor)

Passo 7.Navegador abre um Google redirecionar a página e este encaminha o usuário para o destino original

Atualizado:O Google usado para rastrear cliques em um evento onmousedown só e não alterar o destino do link.Quando um botão do mouse foi pressionado em um link de uma imagem de carregamento foi feita a solicitação para os servidores do google, que contou com o clique (onmousedown => new Image("coogle.counter.server.com/link=www.pressed.com") mas eu acho que foi mal utilizado ou não era confiável o suficiente para que eles decidiram usar o link atual de alteração técnica.

Eu acho que eles realmente têm o link completo no href do link. Mas eles usam JavaScript para pegar o onclick E então, quando você clica no link, ele passa pelo site deles.

Por exemplo, o link para o StackOverflow parece realmente assim:

<a onmousedown="return clk(this.href,'','','res','1','','0CBwQFjAA')" class="l" href="http://stackoverflow.com/"><em>Stack Overflow</em></a>

Agora, a função Click está em algum lugar dentro desse código -fonte minimizado. Aqui você tem o código com algum espaço de branco adicional:

window.clk = function ( e, f, g, k, l, b, m )
{
    if ( document.images )
    {
        var a = encodeURIComponent || escape,
            c = new Image,
            h = window.google.cri++;

        window.google.crm[h] = c;
        c.onerror = c.onload = c.onabort = function()
        {
            delete window.google.crm[h]
        };

        var d, i, j;

        if ( google.v6 )
        {
            d = google.v6.src;
            i = google.v6.complete || google.v6s ? 2 : 1;
            j = (new Date).getTime() - google.v6t; delete google.v6
        }

        if ( b != "" && b.substring( 0, 6 ) != "&sig2=" )
            b = "&sig2=" + b;

        c.src = [
                "/url?sa=T",
                "&source=" + google.sn,
                f ? "&oi=" + a(f) : "",
                g ? "&cad=" + a(g) : "",
                "&ct=",
                a( k || "res" ),
                "&cd=",
                a( l ),
                "&ved=",
                a( m ),
                e ? "&url=" + a( e.replace( /#.*/, "" ) ).replace( /\+/g, "%2B" ) : "",
                "&ei=",
                google.kEI,
                d ? "&v6u=" + a( d ) + "&v6s=" + i + "&v6t=" + j : "",
                b ].join( "" )
    }
    return true
 };

Sem realmente olhar para ele em detalhes, a idéia importante é que ele calcula algum URL do Google e conjuntos this.href (= o alvo do link do link!) Para esse novo URL quando você clica no link. Depois disso, o link é avaliado e o navegador o envia para o URL alterado, apesar de mostrar o URL do link original antes.

É um processo de multipart. Para um dado <a> tag, o href O atributo no HTML apontará para a página real. Isso permite que os navegadores sem JavaScript acessem o lugar certo.

Em seguida, há um mousedown Manipulador de eventos no link. O evento de Mousedown dispara quando você pressiona um botão do mouse enquanto pairava sobre o link. Este evento dispara, mesmo que o botão direito ou do mouse médio seja pressionado. O manipulador substitui o href com o script de redirecionamento no domínio do mecanismo de pesquisa.

Dessa forma, eles ainda exibem o URL correto até o último momento possível, mas ainda usam o redirecionamento de hitgger, mesmo quando você abre o link em uma nova guia.

Parece que eles fazem o oposto direto do que você tem no seu exemplo. Eles têm o href = "o link" e o evento OnClick como a função de rastreamento.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top