谷歌如何在搜索结果页面掩盖链接的真实URL?

8
以下内容经过我测试,包括最新版本的Chrome、Firefox和IE11,结果相同。
在Google搜索后,当你将鼠标悬停在搜索结果页的链接上时,浏览器窗口左下角显示的链接与实际元素href不同。在我测试的三个浏览器中,如果你检查元素面板中的链接,就可以轻松地看到真正的链接(指向www.google.com),而且在打开检查面板时,如果你再次将鼠标悬停在链接上,那么你将看到浏览器窗口左下角的真实URL链接。
我对此行为有两个问题:
1.也许有点天真,但为什么Google要这样做?
2.Google是如何做到的?因为我在Chrome、Firefox和IE11中都看到了这个行为,所以我认为这是一种JavaScript控制的行为(而不是一些浏览器控制的行为),但我从未听说过JavaScript可以做到这一点。如果JavaScript确实可以做到这一点,那么该如何实现呢?
谢谢。

3
当我在检查器打开的情况下将鼠标悬停在链接上时,仍然可以在浏览器角落看到 www.google.com 的 URL。 - Barmar
+1 给 Barmar。我看到了相同的行为。 - Chandranshu
1
是的,你们两个都是正确的。正如我在PoByPobel的回答中所评论的那样,一开始我没有意识到右键单击链接以打开检查会导致onmousedown事件发生,并触发rwt函数。感谢你指出了这一点。 - HartleySan
3个回答

12

看一下初始的标记:

<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 属性。 Barmar 指出了为什么他们这样做。

2
啊哈,我没有看到那个链接,因为我右键点击链接用 检查元素,这改变了链接! - Barmar
我也做了同样的事情。但是在看到 onmousedown 属性后,我意识到 Google 已经改变了 href 的值。所以我试了一个我还没有点击过的链接 ;) - PoByBolek
@PoByBolek,非常感谢您的好答案。像Barmar一样,我没有考虑到右键单击链接以打开检查时,会触发鼠标按下事件。谢谢你指出这一点。现在几乎所有的都讲得通了。不过我还有一个相关的后续问题,我已经在Barmar的答案下发布了评论。谢谢。 - HartleySan
如果在结果页面禁用JavaScript,则结果将从一开始使用跟踪URL(而不是原始URL)。 - Nikos M.

2
结果页面中的链接指向谷歌服务器上的重定向页面。他们这样做是为了跟踪人们点击哪些链接。这比使用Javascript更可靠,因为它不需要用户启用Javascript。
您可以在URL的url参数中看到链接的最终目标。

使用跟踪链接不需要 JavaScript,但您没有解释它们如何使最终目标出现在状态栏中。 - ruakh
1
@ruakh即使没有解决完整的问题,放置部分答案也可以--请参见我的问题meta - aug
1
@Barmar,非常感谢您的解释。我有一个跟进问题要问您的答案。您提到Google做他们所做的是为了跟踪目的,并且这是一种可靠的技术,因为一些用户没有启用JavaScript,但是如果用户禁用了JavaScript,那么链接的href将永远不会更改,他们将永远不会被引导到Google服务器,对吗?相反,他们将直接访问实际的URI,对吗?我只是想确保我没有误解任何内容。谢谢。 - HartleySan
1
@HartleySan 理论上是的。但是 Google 会注意到您已禁用 JavaScript,并(神奇地)向您发送不同的标记,其中所有 href 都包含 Google 重定向 URL。 - PoByBolek
1
他们可能使用<noscript>来检测。 - Barmar
显示剩余6条评论

1
当用户点击 href 时,会在默认行为开始之前执行 onmousedown 事件处理程序。利用这个时间段可以更改锚点标记的 href 属性。
查看他们代码的简化版本:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接