1

如果您对某个字符串进行 google 搜索,浏览器将以可点击链接的形式呈现搜索结果。现在我的问题来了。如果将鼠标悬停在左下角的这些链接上,您将能够看到如果您点击浏览器将带您到达的位置。我想知道浏览器是如何做到的。

我不认为搜索结果实际上是基于 HTML 的锚标记。至少这是我的感觉。但即使在这些情况下,只要我们将鼠标悬停在链接上,就会显示目标 URL。

请分享您对其完成方式的想法。我需要在 js 代码中做同样的事情。

-->感谢您的回答。我不得不问这个是有原因的。我必须在要在 SWT 浏览器和 java GUI 中显示的网页之间启用拖放功能。为了做到这一点,在 mousedown 事件中,我正在触发一个 javascript 代码。这基本上获取了用户单击的锚元素上的 HREF 属性。* *现在问题来了。如果我打开 google.com 并且如果我将鼠标按下 IMAGE,YOUTUBE,GMAIL,DRIVE 链接,则目标 URL 会正常显示。但是,如果我尝试在谷歌搜索或我们需要启用拖放功能的原始瘦客户端应用程序中的任何结果上单击鼠标,则链接不会出现。但是,底部的浏览器会显示目标链接。我很困惑。这就是我认为它不是锚标签的原因。

我尝试使用以下代码为所有锚元素注册一个 onmousedown。但是,如果用户在任何搜索结果上执行 mousedown 操作...不会出现警告框。

var elements = document.getElementsByTagName('a');
for(var i=0;i<elements.length;i++)
{
    elements[i].onmousedown = function()
    { 
          alert(this.getAttribute('href'));
    }
} 
4

4 回答 4

3

我不认为搜索结果实际上是基于 HTML 的锚标记。至少这是我的感觉。

你感觉不对。搜索结果是<a>元素。

但即使在这些情况下,只要我们将鼠标悬停在链接上,就会显示目标 URL。

浏览器必须知道链接的去向。它可以让它的用户界面做任何它喜欢的事情。

请分享您对如何完成的想法..

使用本机代码

我需要在 js 代码中做同样的事情。

window.status = element.href在鼠标悬停事件中。

这些天,一些浏览器会阻止这一点,因为它对于网络钓鱼攻击来说太有用了(欺骗用户去他们期望去的地方以外的地方)。

于 2013-05-13T14:26:44.510 回答
2

至少来自 google 的搜索引擎结果被呈现为 html 锚标记。无需猜测检查搜索页面的 html 来源。

因此,关于在悬停时在状态栏中显示链接的部分,这是标准行为(当我将鼠标悬停在您的姓名上时,我会看到您的 SO 配置文件的 URL)。

我将迈出一大步,假设您想要弄清楚的是如何将链接呈现为锚标记,但仍然做一些 javascripty 的东西,而不是默认的锚标记行为。就像 google 如何将跟踪信息附加到 url 而不是仅在选项卡中打开搜索结果 url。

为此,您需要将事件处理程序附加到锚标记以捕获“单击”事件,防止传播真正的单击事件,并改为执行您的操作。所以 HTML 看起来像一个锚标记,但是当你点击它时,它就是你的所有 javascript。

您会在jQuery之类的问题上找到很多这样做的参考:捕获锚点 href onclick 并异步提交,或者只是关于如何捕获锚点单击/href 事件的基本谷歌搜索。

希望这可以帮助。

于 2013-05-13T14:25:19.730 回答
2

您可以通过这种方式更改状态栏: href 是状态栏中的文本,当用户单击链接时,它会更改为真实的 url:

    <a href="status bar" onmousedown="this.href='real page';">Link</a>
于 2013-05-13T14:28:13.660 回答
2

如果您查看 Google 搜索页面的源代码,您会看到链接具有格式

<a onmousedown="return rwt(...)" href="http://somelink.com/somepath/">...</a>
  • 最初,href链接的属性是正确的,因此它在悬停时正确显示。
  • 但是,它会在点击时被 Google 的rwt函数改变,该函数将href属性更改为http://www.google.com/url?...URL。
  • 这种突变发生在鼠标被按下——就在浏览器跟随链接之前(当按钮被释放发生)。

您可以通过右键单击结果链接并在单击时查看 URL 更改来轻松观察此行为。

于 2013-05-13T14:54:08.697 回答