web-dev-qa-db-ja.com

URLがリダイレクトされている場合、ブラウザはどのようにしてページにアクセスしたことを認識しますか?

Chrome、Safari、Firefox、またはその他のブラウザは、リダイレクトリンクのリンク先URLにアクセスしたことをどのようにして認識しますか?

ブラウザがリダイレクトURLが到達するURLを知っていて、visitedスタイルをリンクに適用することは常に興味深いことです。

私が求めていることを理解するには:

  • Googleにランダムなキーワードを入力します。
  • 検索結果でblueリンクを見つけます。クリックしないでください。
  • 宛先URLをコピーします(通常、リンクの下に緑色で書かれています)。
  • 新しいウィンドウ/タブを開き、宛先URLをアドレスバーに貼り付けて、 Enter
  • Googleの検索結果に戻ると、すぐにリンクにアクセスして紫色に変わります。

ただし、リンクはいくつかのgoogle.com/url...ページ。リンクの履歴をアフィリエイトするURLなどをブラウザに伝えるためにGoogleがマークアップに入れるものはありますか?ブラウザはGoogleの検索結果を特定の方法で読み取るだけですか?

5
henryaaron

リンクにカーソルを合わせているときにステータスバーに注意を払うと、最初は「クリーンな」URLを指していることがわかります。

(3つのマウスボタンのいずれかを使用して)リンクをクリックした場合にのみ、JavaScriptイベントがトリガーされ、リンクの宛先がGoogleのURLリダイレクトに変更されます。

私の主張を確認するには、紫色のリンクのいずれかを右クリックして、コンテキストメニューを閉じます。 Googleの検索結果からサイトにアクセスしたことがない限り、色が変わることがわかります。1

GoogleがリダイレクトURLをどのように挿入するか正確にわかりません2、しかし一般的な考え方はこれです:

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

this jsFiddle を試して、どのように機能するかを確認できます。


1 Chromium 25(Ubuntu 12.10)およびChrome 26(Windows 7)でテスト済み

2 最小化されたJavaScriptは少し読みにくいです。

6
Dennis