Frage

Auf den Google und Yahoo-Suchergebnisseite, die URLs der 10 Suchergebnis Links verweist tatsächlich auf google.com oder yahoo.com. Die URLs haben zusätzliche Argumente, die google.com erlauben oder yahoo.com zu Umleitung auf das tatsächliche Suchergebnis, wenn der Link angeklickt wird. Wenn der Benutzer der Maus über den Link, URL des Suchergebnisses (und nicht die google.com oder yahoo.com URL) in der Statusleiste des Browsers angezeigt wird.

Ich frage mich, wie sie das tun.

Vor vielen Jahren, wird dies durch einige Javascript, die erreicht worden wäre, dass Sätze window.status, aber das scheint nicht zu Arbeit mehr, wie erklärt sich durch zuverlässige Cross-Browser-Weg Statusleiste Text der Einstellung

habe ich einen Link, der wie folgt aussieht: <a href="http://somedomain.com/ReallyLongURLThatShouldNotBeSeenInTheStatusBar" onmouseover="window.status='http://niceShourtUrl.com/'" onmouseout="window.status=''">Click Me</a>

Dieser Link versucht, die window.status Strategie zu verwenden, aber es funktioniert nicht. Wie behebe ich diesen Link, so dass es die wirkt wie die Links auf Google und Yahoo-Suchergebnisseite? In diesem Beispiel möchte ich „ http://niceShourtUrl.com/ “ in der Statusleiste angezeigt werden, wenn die Benutzer mit der Maus über den Link.

War es hilfreich?

Lösung

Es ist schwer, die Quelle zu lesen, aber Sie werden in der Tat sehen, dass die URLs (in den <a> Tags) sind der richtige Ziel-URLs, weshalb die Statusleiste des Browsers zeigt die korrekte URL (anstelle dem Link-Tracking, dass es durch Umleitungen Sie, wenn Sie tatsächlich klicken). Es gibt dann JavaScript einige onclick, die dann abfangen die Klicks, bevor die Standardaktion des Browsers (nach dem Link) stattfinden kann.

Andere Tipps

Google hat onMouseDown Handler auf jeder Verbindung, dass der Wandel auf den Link von der ursprünglichen Quelle zeigt auf Google Redirect. So ersetzt onmousedown den Link und wenn onClick erscheint (kurz nach dem onmousedown) der Link verweist bereits irgendwo anders als die ursprüngliche Richtung.

Schritt 1. Der Benutzer klickt auf einen Link (Maustaste gedrückt wird)

Schritt 2. onMouseDown Ereignisauslöser

Schritt 3. Linkziel (a href-Wert) geändert

Schritt 4. Maustaste kommt

Schritt 5. onClick Ereignis-Triggern

Schritt 6. Browser sieht, dass ein Link angeklickt wurde, und leitet den Benutzer an das gewünschte Ziel (eingestellt durch einen bereits verändert href Wert)

Schritt 7. Browser öffnet sich ein Google umadressierenseite und diese leitet den Benutzer an das ursprüngliche Ziel

Aktualisiert: Google verwendete Klicks auf einem onmousedown Ereignis nur zu verfolgen und nicht das Link-Ziel ändern. Wenn eine Maustaste auf einen Link ein Bild Ladeanfrage gedrückt wurde auf den Google-Servern hergestellt, die den Klick (onmousedown => new Image("coogle.counter.server.com/link=www.pressed.com")) gezählt, aber ich denke, es missbraucht wurde oder es war nicht zuverlässig genug, dass sie die aktuelle Verbindung verändernde Technik zu verwenden, entschieden.

Ich denke, dass sie tatsächlich den vollständigen Link in der href der Verbindung haben. Aber sie verwenden Javascript, um die onclick zu fangen und dann, wenn Sie auf den Link klicken, es Routen über ihre Website.

Zum Beispiel der Link zu Stackoverflow sieht tatsächlich aus wie diese:

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

Nun ist die Klick-Funktion ist irgendwo in diesem minimiert Quellcode. Hier haben Sie den Code mit einigen zusätzlichen Leerzeichen:

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
 };

Ohne wirklich auf sie im Detail zu suchen, die wichtige Idee dabei ist, dass es einige google url berechnet und setzt this.href (= die Link-Ziel des Links!) Auf die neue URL, wenn Sie auf den Link klicken. Danach wird die Verbindung dann ausgewertet wird und der Browser sendet Ihnen auf diese veränderte URL trotz bevor die Original-Link-URL zeigt.

Es ist ein mehrteiliger Prozess. Für einen gegebenen <a> Tag wird Punkt des href Attribut im HTML auf die aktuelle Seite. Dies ermöglicht Browser ohne JavaScript an den richtigen Ort zu gehen.

Als nächstes gibt es einen mousedown Event-Handler auf den Link. MouseDown- Ereignis wird ausgelöst, wenn Sie eine Maustaste drücken, während sie über den Link schweben. Dieses Ereignis wird ausgelöst, auch wenn die rechte oder die mittlere Maustaste gedrückt wird. Der Handler ersetzt die href mit dem Umleiten Skript in der Domäne des Suchmaschine.

So können sie immer noch die richtige URL angezeigt wird bis zum letzten Moment, aber sie immer noch den Umleiten Hit Logger verwenden, auch wenn Sie auf den Link in einem neuen Tab öffnen.

Es scheint, sie tun das genaue Gegenteil von dem, was Sie in Ihrem Beispiel haben. Sie haben die href = „auf den Link“ und das Onclick-Ereignis als Tracking-Funktion.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top