Как Google и Yahoo заменяют URL в строке состояния браузера?

На Google и страницах результатов поиска Yahoo, URL 10 ссылок результата поиска на самом деле указывают на google.com или yahoo.com. URL имеют дополнительные аргументы, которые позволяют google.com или yahoo.com перенаправлять к фактическому результату поиска, когда на ссылку нажимают. Когда пользовательские мыши по ссылке, URL результата поиска (а не URL google.com или yahoo.com) отображены в строке состояния браузера.

Я задаюсь вопросом, как они делают это.

Много лет назад это было бы выполнено при наличии некоторого JavaScript, который устанавливает window.status, но это, кажется, больше не работает, как объяснен Надежным перекрестным браузером способ установить Текст строки состояния

У меня есть ссылка, которая похожа на это: Click Me

Эта ссылка пыталась использовать window.status стратегию, но она не работает. Как я исправляю эту ссылку так, чтобы она действовала как ссылки на страницах результата поиска Google и Yahoo? В этом примере я хочу, чтобы "http://niceShourtUrl.com/" был отображен в строке состояния когда пользовательские мыши по ссылке.

18
задан Community 23 May 2017 в 12:01
поделиться

6 ответов

У Google есть обработчики onMouseDown для каждой ссылки, которые изменяют ссылку из исходного источника, указывающую на перенаправление Google. Таким образом, onmousedown заменяет ссылку, и когда появляется onClick (вскоре после onmousedown), ссылка уже указывает куда-то еще, кроме исходного направления.

Шаг 1. Пользователь нажимает ссылку (кнопка мыши нажата)

Шаг 2. Событие onMouseDown запускается

Шаг 3. Цель ссылки (значение href) изменяется

Шаг 4. Появляется кнопка мыши вверх

Шаг 5. Событие onClick запускает

Шаг 6. Браузер видит, что ссылка была нажата, и перенаправляет пользователя в желаемый пункт назначения (установленный уже измененным значением href)

Шаг 7. Браузер открывает Google страница перенаправления, и это перенаправляет пользователя к исходному месту назначения

Обновлено: Google использовал для отслеживания кликов только по событию onmousedown и не менял место назначения ссылки.Когда кнопка мыши была нажата на ссылке, был сделан запрос загрузки изображения на серверы Google, которые засчитали клик ( onmousedown => новое изображение ("coogle.counter.server.com/link=www.pressed.com") ), но я предполагаю, что он использовался неправильно или был недостаточно надежен, чтобы они решили использовать текущую технику изменения ссылки.

7
ответ дан 30 November 2019 в 08:03
поделиться

Например, ссылка на StackOverflow на самом деле выглядит так:

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

Теперь функция щелчка находится где-то внутри этого свернутого исходного кода. Здесь у вас есть код с дополнительными пробелами:

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

Не вдаваясь в подробности, важно то, что он вычисляет URL-адрес Google и устанавливает this.href (= ссылка на ссылку target!) на этот новый URL-адрес, когда вы щелкаете ссылку. После этого ссылка оценивается, и браузер отправляет вам этот измененный URL-адрес, несмотря на то, что ранее был показан исходный URL-адрес ссылки.

3
ответ дан 30 November 2019 в 08:03
поделиться

Я думаю, что у них действительно есть полная ссылка в href ссылки. НО они используют javascript, чтобы поймать onclick, а затем, когда вы нажимаете на ссылку, она проходит через их сайт.

6
ответ дан 30 November 2019 в 08:03
поделиться

Похоже, что они делают прямо противоположное тому, что есть в вашем примере. У них есть href="ссылка" и событие onclick в качестве функции отслеживания.

0
ответ дан 30 November 2019 в 08:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: