Как Google маскирует настоящие URL-адреса ссылок на страницах результатов поиска?

Следующее я тестировал в последних версиях Chrome и Firefox, а также в IE11, и результаты были такими же.

Если вы выполняете поиск в Google, а затем наводите указатель мыши на ссылку на странице результатов поиска, ссылка, отображаемая в нижнем левом углу окна браузера, не совпадает с фактическим href элемента a.
Во всех трех случаях В браузерах, в которых я тестировал это, если вы проверите ссылку в инспекторе элементов, вы можете легко увидеть реальную ссылку (которая ведет к www.google.com), а пока инспектор открыт, если вы снова наведете указатель мыши на ссылку, вы увидите увидеть реальную ссылку URL в левом нижнем углу окна браузера.

У меня есть два вопроса относительно этого поведения?

  1. Хотя, возможно, немного наивно спрашивать, почему Google это делает?
  2. Как Google это делает? Поскольку я видел такое поведение в Chrome, Firefox и IE11, я думаю, что это какое-то поведение, контролируемое JavaScript (в отличие от поведения, контролируемого браузером), но я никогда не слышал, чтобы такое было возможно в JavaScript. Если это возможно в JavaScript, как вы это делаете?

Спасибо.


person HartleySan    schedule 20.11.2013    source источник
comment
Когда я навожу курсор на ссылку с открытым инспектором, я все еще вижу URL-адрес www.google.com в углу браузера.   -  person Barmar    schedule 20.11.2013
comment
+1 для Бармара. Я вижу такое же поведение.   -  person Chandranshu    schedule 20.11.2013
comment
Да, вы оба правы. Как я прокомментировал в ответе PoByPobel, мне сначала не пришло в голову, что щелчок правой кнопкой мыши по ссылке для открытия проверки вызывает событие onmousedown и запуск функции rwt. Спасибо за указание на это.   -  person HartleySan    schedule 20.11.2013


Ответы (3)


Посмотрите на начальную разметку:

<a onmousedown="return rwt(this,'','','','3','AFQjCNF8xnW_qOvuZURbtcZUvB6zhKtRQw','35cXyZwuoZY8hBY1VfDr8Q','0CEAQFjAC','','',event)"
      href="http://en.wikipedia.org/wiki/How_Do_You_Do_It%3F">
   <em>How Do You Do It</em>? - Wikipedia, the free encyclopedia
</a>

Первоначально атрибут href показывает «настоящий» URL. Но когда вы нажимаете на ссылку, функция rwt меняет значение атрибута на

http://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&ved=0CEAQFjAC&url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FHow_Do_You_Do_It%253F&ei=8nSMUqXtLKfe4QSzwIDADQ&usg=AFQjCNF8xnW_qOvuZURbtcZUvB6zhKtRQw&sig2=35cXyZwuoZY8hBY1VfDr8Q&bvm=bv.56643336,d.bGE

Чтобы ответить на ваш вопрос: они используют атрибут onmousedown для изменения атрибута href ссылки при нажатии на нее. Бармар указывает, почему они это делают.

person PoByBolek    schedule 20.11.2013
comment
Ахах, я этого не видел, потому что я щелкнул правой кнопкой мыши ссылку, чтобы использовать Inspect element, и это изменило ссылку! - person Barmar; 20.11.2013
comment
Я сделал то же самое. Но после того, как я увидел атрибут onmousedown, я понял, что Google уже изменил значение href. Поэтому я попробовал ссылку, по которой еще не нажимал;) - person PoByBolek; 20.11.2013
comment
@PoByBolek, большое спасибо за этот хороший ответ. Как и Бармар, я не учел тот факт, что когда я щелкаю правой кнопкой мыши по ссылке, чтобы открыть окно проверки, я вызываю событие наведения мыши. Спасибо, что указали на это. Это почти все имеет смысл сейчас. У меня все еще есть один связанный дополнительный вопрос, который я разместил в качестве комментария к ответу Бармара. Спасибо. - person HartleySan; 20.11.2013
comment
Если отключить javascript на странице результатов, в результатах с самого начала будет использоваться URL-адрес отслеживания (вместо исходного). - person Nikos M.; 25.01.2021

Ссылка на странице результатов указывает на страницу перенаправления на сервере Google. Они делают это, чтобы отслеживать, по каким ссылкам нажимают люди. Это более надежно, чем использование Javascript, поскольку не требует от пользователей включения Javascript.

Вы можете увидеть конечную цель ссылки в параметре url URL-адреса.

person Barmar    schedule 20.11.2013
comment
Использование ссылок отслеживания не требует JavaScript, но вы не объяснили, как они отображают конечную цель в строке состояния. - person ruakh; 20.11.2013
comment
Я не объяснил этого, потому что, насколько я могу судить, этого не происходит. - person Barmar; 20.11.2013
comment
Что ж, это действительно случается. (И даже если это не так, я не думаю, что вам следует публиковать ответ, который просто молча игнорирует часть вопроса. По крайней мере, если вопрос некорректен и на него невозможно ответить, вы должны так сказать.) - person ruakh; 20.11.2013
comment
Я сделал, см. мой комментарий выше. И мой комментарий в ответе PoByBolek объясняет мое непонимание. - person Barmar; 20.11.2013
comment
Смотрите мой первый комментарий под вопросом. - person Barmar; 20.11.2013
comment
@ruakh Можно давать частичные ответы, даже если это не решает весь вопрос — см. мой вопрос мета - person aug; 20.11.2013
comment
@Barmar, большое спасибо за объяснение. У меня был один дополнительный вопрос к вашему ответу. Вы упомянули, что Google делает то же самое для целей отслеживания, и что это надежный метод, поскольку у некоторых пользователей не включен JavaScript, но если у пользователя отключен JavaScript, то href ссылки никогда не будет изменена, и они никогда не направляться на сервер Google, верно? Вместо этого они будут перенаправлены непосредственно на фактический URI, верно? Я просто хочу убедиться, что я ничего не понимаю неправильно. Спасибо. - person HartleySan; 20.11.2013
comment
@HartleySan Теоретически да. Но Google каким-то образом замечает, что у вас отключен JavaScript, и (волшебным образом) отправляет вам другую разметку, в которой все href содержат URL-адрес перенаправления Google. - person PoByBolek; 20.11.2013
comment
Они, вероятно, используют <noscript>, чтобы обнаружить это. - person Barmar; 20.11.2013
comment
Все это имеет смысл. Большое спасибо. - person HartleySan; 20.11.2013
comment
@aug: Конечно, можно дать частичный ответ; все, что я сказал, это то, что вы должны прямо говорить об этом. Это особенно верно, когда причина, по которой вы не отвечаете на часть вопроса, заключается в том, что вы думаете, что его предпосылка неверна. (В данном случае оказывается, что часть ответа Бармара была по существу неверна — Google действительно использует JavaScript для создания URL-адресов отслеживания, и его ответ ясно подразумевает, что это не так — таким образом, который был тесно связан с половиной вопрос, который он не понял.) - person ruakh; 20.11.2013

Когда пользователь щелкает href, обработчик события onmousedown запускается до того, как сработает поведение по умолчанию. Этот временной интервал используется для изменения href тега привязки.

Посмотрите на эту упрощенную версию их кода:

<a 
  href="https://www.google.com/" 
  data-href='https://www.yahoo.com/' 
  onmousedown="this.href = this.dataset.href"
>Link</a>

person HaNdTriX    schedule 13.04.2017