如果 URL 正在重定向,我的浏览器如何知道我已经访问过该页面?

如果 URL 正在重定向,我的浏览器如何知道我已经访问过该页面?

Chrome、Safari、Firefox 或其他浏览器如何知道您访问了重定向链接的目标网址?

我一直觉得很有趣的是,浏览器知道重定向 URL 所指向的 URL,并应用访问过链接的样式。

为了理解我的问题:

  • 在 Google 中输入一个随机关键字。
  • 发现蓝色的搜索结果中的链接。请勿点击该链接。
  • 复制目标网址(通常以绿色显示在链接下方)。
  • 打开新窗口/选项卡并将目标网址粘贴到地址栏中,然后点击Enter
  • 返回 Google 搜索结果,链接立即被访问并变成紫色。

但是,链接指向某个google.com/url...页面。Google 是否会在其标记中添加某些内容来告诉浏览器将链接历史记录与哪个 URL 关联起来?浏览器是否只是以某种方式读取 Google 搜索结果?

答案1

如果您在鼠标悬停在链接上时留意状态栏,您会看到它最初指向“干净”的 URL。

仅当您点击链接(使用鼠标三个按钮中的任意一个)时,才会触发 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);
}

你可以试试这个 jsFiddle看看它是如何工作的。


1在 Chromium 25 (Ubuntu 12.10) 和 Chrome 26 (Windows 7) 上测试

2最小化的 JavaScript 有点难以阅读。

相关内容