На 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/" был отображен в строке состояния когда пользовательские мыши по ссылке.
Трудно читать источник, но вы увидите, что на самом деле URL (в тегах ) являются правильными целевыми URL, поэтому в строке состояния браузера отображается правильный URL (вместо отслеживающей ссылки, по которой он перенаправляет вас, когда вы нажимаете). Затем существует
onclick
JavaScript, который может перехватить щелчки до того, как произойдет стандартное действие браузера (переход по ссылке).
У 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")
), но я предполагаю, что он использовался неправильно или был недостаточно надежен, чтобы они решили использовать текущую технику изменения ссылки.
Например, ссылка на 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-адрес ссылки.
Я думаю, что у них действительно есть полная ссылка в href
ссылки. НО они используют javascript, чтобы поймать onclick
, а затем, когда вы нажимаете на ссылку, она проходит через их сайт.
Это составной процесс. Для данного тега
атрибут href
в HTML будет указывать на фактическую страницу. Это позволяет браузерам без JavaScript переходить в нужное место.
Затем в ссылке есть обработчик события mousedown
. Событие mousedown запускается, когда вы нажимаете кнопку мыши при наведении курсора на ссылку. Это событие запускается, даже если нажата правая или средняя кнопка мыши. Обработчик заменяет href
скриптом перенаправления в домене поисковой системы.
Таким образом, они по-прежнему отображают правильный URL-адрес до последнего возможного момента, но они по-прежнему используют регистратор обращений с перенаправлением, даже когда вы открываете ссылку в новой вкладке.
Похоже, что они делают прямо противоположное тому, что есть в вашем примере. У них есть href="ссылка" и событие onclick в качестве функции отслеживания.