Skąd moja przeglądarka wie, że odwiedziłem stronę, jeśli adres URL przekierowuje?

5

Skąd Chrome, Safari, Firefox lub inne przeglądarki wiedzą, że odwiedziłeś docelowy adres URL linku przekierowującego?

Zawsze uważałem za interesujące, że przeglądarki znają adres URL przekierowującego adresu URL i stosują odwiedzany styl do linku.

Aby zrozumieć, o co proszę:

  • Wpisz losowe słowo kluczowe w Google.
  • Znajdź niebieski link w wyniku wyszukiwania. Nie klikaj go.
  • Skopiuj docelowy adres URL (zwykle napisany na zielono pod linkiem).
  • Otwórz nowe okno / kartę i wklej docelowy adres URL w pasku adresu i naciśnij Enter.
  • Wróć do wyników wyszukiwania Google i natychmiast link zostanie odwiedzony i zmieni kolor na fioletowy.

Jednak link prowadzi do google.com/url...strony. Czy jest coś, co Google umieszcza w swoich znacznikach, aby poinformować przeglądarkę, z jakim adresem URL powiązać historię linku czy coś takiego? Czy przeglądarki tylko odczytują wyniki wyszukiwania Google w określony sposób?

henryaaron
źródło
Jest to przeglądarka, która łączy się z adresem URL i otrzymuje przekierowany. Żadnych tajemnic.
vonbrand

Odpowiedzi:

6

Jeśli zwrócisz uwagę na pasek stanu podczas najechania kursorem na link, zobaczysz, że początkowo wskazuje on „czysty” adres URL.

Tylko po kliknięciu linku (jednym z trzech przycisków myszy) uruchamiane jest zdarzenie JavaScript, które zmienia miejsce docelowe linku na przekierowanie adresu URL Google.

Aby zweryfikować moje roszczenie, kliknij prawym przyciskiem myszy dowolny fioletowy link i zamknij menu kontekstowe. O ile nie odwiedziłeś już witryny z wyników wyszukiwania Google, zobaczysz, że zmienia ona kolory. 1

Nie wiem dokładnie, jak Google wstrzykuje adres URL przekierowania 2 , ale ogólny pomysł jest następujący:

// define a function `f' that changes a link's clean URL to a redirection URL
var f = function () {
    // prepend `http://www.google.com/url?rct=j&url=' to the link's target
    this.href = 'http://www.google.com/url?rct=j&url=' + escape(this.href);
    // don't invoke this function anymore when clicking the link
    this.removeEventListener('click', f);
    // don't invoke this function anymore when right-clicking the link
    this.removeEventListener('contextmenu', f);
}

// save all <a> tags in an array `a'
var a = document.getElementsByTagName('a');

// for each <a> tag in the array `a'
for (var i = 0; i < a.length; i++) {
    // execute function `f' when clicking the link
    a[i].addEventListener('click', f);
    // execute function `f' when right-clicking the link
    a[i].addEventListener('contextmenu', f);
}

Możesz wypróbować ten jsFiddle, aby zobaczyć, jak to działa.


1 Testowane na Chromium 25 (Ubuntu 12.10) i Chrome 26 (Windows 7)

2 Zminimalizowany JavaScript jest nieco trudny do odczytania.

Dennis
źródło
Nie sądzę, że tak właśnie jest. To również wydaje się być bardzo specyficznym wyjaśnieniem dla systemu operacyjnego. Wskazałeś mi jednak jakiś kierunek. Odkryłem, że w Google Ads reklamodawcy mogą wyświetlać dowolny wybrany adres URL, a po najechaniu kursorem na reklamę pojawia się Idź do wyświetlanego adresu URL na pasku stanu, ale docelowy adres URL jest zupełnie inny. Sądzę, że przeglądarki są dostosowane do wyników wyszukiwania Google, aby używać zielonych adresów URL do historii.
henryaaron
Żadna część mojej odpowiedzi nie jest specyficzna dla systemu operacyjnego. Wspomniałem o dokładnej wersji (która zawiera system operacyjny), ponieważ ponowne renderowanie kolorów linków może się różnić, ale ogólny wynik jest dokładnie taki sam, np. W bieżącej wersji Chrome na Windows 7. Jeśli tego nie zrobisz uwierz mi: 1. Postępuj zgodnie z krokami opisanymi w mojej odpowiedzi z włączoną obsługą JavaScript. 2. Google coś z wyłączoną obsługą JavaScript. Zobaczysz, że bez JavaScript żadne czyste adresy URL nie będą wyświetlane na pasku stanu, ponieważ nie ma możliwości zmiany adresu URL po kliknięciu linku.
Dennis,
Wiem, że Google wyświetla zupełnie inną stronę, gdy JavaScript jest wyłączony na twoim komputerze. Niemniej jednak ma to sens. Czy możesz wyjaśnić, jaką technikę JavaScript umożliwiłbyś manipulowanie paskiem stanu?
henryaaron
Nie jest zmieniany pasek stanu; to adres URL linku. Link początkowo wskazuje na czysty adres URL, ale ten adres URL ulega modyfikacji po kliknięciu. Dodałem skrzypce do zilustrowania.
Dennis
Łał. Tak jest! Jestem bardzo zszokowany. Google nie może znaleźć lepszego sposobu śledzenia ich danych analitycznych? To znaczy, jeśli używasz do tego JavaScript, możesz równie dobrze śledzić wyzwalane linki za pomocą wbudowanego JavaScript i nie mieć całego systemu przekierowań. Teraz rozumiem, dzięki za cierpliwość do mnie.
henryaaron