谷歌和雅虎如何替换浏览器状态栏中的 URL?

     2023-02-16     95

关键词:

【中文标题】谷歌和雅虎如何替换浏览器状态栏中的 URL?【英文标题】:How do Google and Yahoo replace the URL in the browser status bar? 【发布时间】:2011-02-18 07:26:53 【问题描述】:

在 Google 和 Yahoo 搜索页面上,10 个搜索结果链接的 URL 实际上指向 google.com 或 yahoo.com。 URL 有额外的参数,允许 google.com 或 yahoo.com 在单击链接时重定向到实际的搜索结果。当用户将鼠标悬停在链接上时,搜索结果 URL(而不是 google.com 或 yahoo.com URL)会显示在浏览器的状态栏中。

我想知道他们是怎么做到的。

很多年前,这可以通过一些设置 window.status 的 javascript 来实现,但这似乎不再起作用,正如 Reliable cross browser way of setting Status bar text 所解释的那样

我有一个如下所示的链接: <a href="http://somedomain.com/ReallyLongURLThatShouldNotBeSeenInTheStatusBar" onmouseover="window.status='http://niceShourtUrl.com/'" onmouseout="window.status=''">Click Me</a>

此链接尝试使用 window.status 策略,但不起作用。如何修复此链接,使其类似于 Google 和 Yahoo 搜索结果页面上的链接?在本例中,我希望当用户将鼠标悬停在链接上时,状态栏中会显示“http://niceShourtUrl.com/”。

【问题讨论】:

+1 非常有趣的问题。 这对于那些甚至在 10 年后关注这个的人来说可能会很有趣。有人写了一个插件,它将使用真实的链接。使用 Adblockers 时非常有用,因为广告部分由于被阻止而不再起作用。查看更多 github.com/palant/searchlinkfix 和 chrome.google.com/webstore/detail/google-search-link-fix/… 【参考方案1】:

很难阅读源代码,但您会发现实际上 URL(在 <a> 标记中)是正确的目标 URL,这就是为什么浏览器的状态栏显示正确的 URL(而不是跟踪链接当您实际单击时它会重定向您)。然后有一些onclick JavaScript 可以在浏览器的默认操作(按照链接)发生之前拦截点击。

【讨论】:

所以,我猜他们不跟踪右键单击 > 在新选项卡中打开或中键 @Atomiton 当然,他们不会“跟踪”它。 Javascript 的浏览器实现将其视为合法点击并触发事件处理程序。 @Josh:会吗? right-click > open in new tab 不是简单地将href 复制并粘贴到新标签的地址栏中吗?我不记得在这种情况下触发的任何 javascript 事件。编辑:啊! mousedown 事件捕获所有按钮...左、右和中。 @Atomiton 是的,我想我错了。我认为它肯定会触发 onclick! @Josh。是的,不过,捕获 mousedown 是有意义的。【参考方案2】:

Google 在每个链接上都有 onMouseDown 处理程序,这些处理程序将链接从指向 Google 重定向的原始来源更改。所以 onmousedown 替换了链接,当 onClick 出现时(在 onmousedown 之后不久),链接已经指向原始方向以外的其他地方。

步骤 1. 用户点击链接(鼠标按钮按下)

步骤 2. onMouseDown 事件触发

步骤 3. 链接目标(一个 href 值)被更改

第 4 步。鼠标按钮出现

步骤 5. onClick 事件触发器

第 6 步。浏览器看到一个链接被点击并将用户转发到所需的目的地(由已更改的 href 值设置)

第 7 步。浏览器打开一个 Google 重定向页面,这会将用户转发到原始目的地

更新:Google 过去只跟踪 onmousedown 事件的点击,并没有更改链接目标。当在链接上按下鼠标按钮时,向谷歌服务器发出了图像加载请求,该服务器计算了点击次数(onmousedown => new Image("coogle.counter.server.com/link=www.pressed.com")),但我猜它被滥用了,或者它不够可靠,他们决定使用当前的链接更改技术.

【讨论】:

不,它没有。如果您仔细查看下面发布的代码,您会发现 href 从未真正更改过。 是的 - 它取决于当前使用的函数 - clk() 或 rwt()。 rwt() 完全符合我的描述。 实际上 clk 也改变了 href 我加载的谷歌页面有 clk() 函数,你在那个函数的什么地方看到它改变了 href? 查看代码示例的顶部:【参考方案3】:

我认为他们实际上在链接的href 中有完整的链接。但是他们使用 javascript 来捕获 onclick,然后当您单击链接时,它会通过他们的网站路由。

【讨论】:

是的,他们使用脚本记录该 URL 的一些唯一 ID 以进行跟踪,但它仍然是指向实际页面的实际链接。 @Mike W:您是否尝试使用 Firebug 查看源代码?您可以看到实际的 href 链接指向该页面,而不是 Google 页面。【参考方案4】:

例如 *** 的链接实际上是这样的:

<a onmousedown="return clk(this.href,'','','res','1','','0CBwQFjAA')" class="l" href="http://***.com/"><em>Stack Overflow</em></a>

现在 click 函数在最小化的源代码中的某个地方。这里有一些额外空格的代码:

window.clk = function ( e, f, g, k, l, b, m )

    if ( document.images )
    
        var a = encodeURIComponent || escape,
            c = new Image,
            h = window.google.cri++;

        window.google.crm[h] = c;
        c.onerror = c.onload = c.onabort = function()
        
            delete window.google.crm[h]
        ;

        var d, i, j;

        if ( google.v6 )
        
            d = google.v6.src;
            i = google.v6.complete || google.v6s ? 2 : 1;
            j = (new Date).getTime() - google.v6t; delete google.v6
        

        if ( b != "" && b.substring( 0, 6 ) != "&sig2=" )
            b = "&sig2=" + b;

        c.src = [
                "/url?sa=T",
                "&source=" + google.sn,
                f ? "&oi=" + a(f) : "",
                g ? "&cad=" + a(g) : "",
                "&ct=",
                a( k || "res" ),
                "&cd=",
                a( l ),
                "&ved=",
                a( m ),
                e ? "&url=" + a( e.replace( /#.*/, "" ) ).replace( /\+/g, "%2B" ) : "",
                "&ei=",
                google.kEI,
                d ? "&v6u=" + a( d ) + "&v6s=" + i + "&v6t=" + j : "",
                b ].join( "" )
    
    return true
 ;

如果不仔细查看它,重要的想法是它会计算一些 google url,并在您单击链接时将 this.href(= 链接的链接目标!)设置为该新 url。之后,链接会被评估,浏览器会将您发送到更改后的 url,尽管之前显示了原始链接 url。

【讨论】:

我在这个函数中没有看到它实际改变'this.href'的任何地方,它只是通过初始调用发送到函数......对我来说,这个函数看起来改变了源某处的图像。【参考方案5】:

这是一个多部分的过程。对于给定的&lt;a&gt; 标记,HTML 中的href 属性将指向实际页面。这允许没有 JavaScript 的浏览器去正确的地方。

接下来,链接上有一个mousedown 事件处理程序。当您将鼠标悬停在链接上时按下鼠标按钮时会触发 mousedown 事件。即使按下鼠标右键或中键也会触发此事件。该处理程序将href 替换为搜索引擎域中的重定向脚本。

这样他们仍然会在最后一刻显示正确的 URL,但他们仍然使用重定向命中记录器,即使您在新标签页中打开链接也是如此。

【讨论】:

【参考方案6】:

看起来他们的做法与您在示例中的做法完全相反。它们具有 href="the link" 和 onclick 事件作为跟踪功能。

【讨论】:

当用户返回表单以更正错误时,如何防止浏览器栏中的 URL 发生变化?

】当用户返回表单以更正错误时,如何防止浏览器栏中的URL发生变化?【英文标题】:HowdoIpreventURLinbrowserbarfromchangingwhenauserisreturnedtoaformtocorrecterrors?【发布时间】:2017-05-1700:16:35【问题描述】:我正在使用Rails5。我有一个页面... 查看详情

Facebook 如何在不重新加载页面或使用 # 或的情况下更改浏览器地址栏中的 URL?

】Facebook如何在不重新加载页面或使用#或的情况下更改浏览器地址栏中的URL?【英文标题】:HowdoesFacebookchangetheURLinthebrowser\'saddressbarwithoutpagereloadoruseof#or?【发布时间】:2011-10-1106:17:18【问题描述】:几个月前,我在vkontakte.ru(... 查看详情

替换/操作 url 中的“主机名”而不重定向到它

...描述】:有什么办法可以替换url中的主机名,但我不希望浏览器加载/重定向/打开替换的主机名,它应该只是在地址栏中显示它与它无关。场景:我正在测试一个网站(合法),我发现它只是检查URL中的top 查看详情

如何在状态栏中隐藏 url 地址? [复制]

】如何在状态栏中隐藏url地址?[复制]【英文标题】:howtohideurladdressinstatusbar?[duplicate]【发布时间】:2011-06-2919:36:41【问题描述】:可能重复:JavaScript:Changebrowserwindowstatusmessage当我们将鼠标悬停在某些链接文本上时,目标链接会... 查看详情

如何在url地址栏中直接写数组参数进行传递

...sp;   今天博主遇到这样一个问题,就是如何在浏览器url地址栏中直接写入数组参数进行传递,问了身边几个同事,都没有找到成功的书写方法。就开始怀疑是否可以在地址栏中直接写入数组进行传递。开始在谷歌,百... 查看详情

# 浏览器 URL 栏中的符号

】#浏览器URL栏中的符号【英文标题】:#symbolinURLbarofthebrowser【发布时间】:2017-11-0808:39:52【问题描述】:我的jsx中有这个,#用于在用户点击a标签时停止链接。<atarget=obj.handlerName===\'detail\'?`_blank`:\'\'href=obj.handlerName===\'detail\'?`/... 查看详情

谷歌浏览器隐藏url前缀问题

...,那么用户的安全将有可能遭至威胁,如果你不希望Chrome浏览器隐藏URL的HTTP、HTTPS及WWW前缀,则只需执行以下几步简单的操作即可:一、打开Chrome浏览器;二、在Chrome浏览器中新建一个标签页,并在标签页栏下方的地址栏中输入... 查看详情

chrome浏览器一键切换搜索引擎,一键切换谷歌和百度搜索

chrome浏览器一键切换搜索引擎,一键切换谷歌和百度搜索背景有么有办法在谷歌和百度之间(或其他引擎或非引擎,如Youtube、B站、Bing等)之间切换。我们当然是不想重新输入keyword,甚至点击浏览器插件的图... 查看详情

如何获取地址栏中的url

1.首先打开浏览器,在百度搜索中输入搜索关键字。(演示以搜索“百度一下”为例)2.在搜索页面的顶部就是对应的URL(也就是常说的网页网址)。3.选择地址栏的网址,然后右键鼠标选择【复制】,将网页的网址进行复制。4.... 查看详情

更改状态栏中的链接

...2014-04-1922:00:25【问题描述】:我正在寻找一种方法来更改浏览器状态栏中的链接,类似于google和yahoo用来显示其搜索结果的方法。这是我的示例代码<html><head><scriptclass="jsbin"src="http://ajax.googleapis.com/ajax/libs/jq 查看详情

table标签在谷歌和ie浏览器下不同的表现效果

...   我在tr外面包了一个template标签,效果:  谷歌浏览器下实现了这个效果,但是在ie(11)下,却报错了"item_i"isnotdefined原因:  table的嵌套规则是:table下仅仅能包括thead,tbody,tfoot。tbody,thea 查看详情

facebook如何重写浏览器地址栏中页面的源URL?

】facebook如何重写浏览器地址栏中页面的源URL?【英文标题】:HowdoesfacebookrewritethesourceURLofapageinthebrowseraddressbar?【发布时间】:2011-04-2011:16:14【问题描述】:转到http://www.facebook.com/facebook?v=wall,然后单击信息选项卡。内容将被加... 查看详情

python清理ios屏幕截图的状态栏。状态栏中的时间保持不变,但所有其他图形都被删除并替换为w(代码片段)

查看详情

更改 Chrome 状态栏中显示的 URL

】更改Chrome状态栏中显示的URL【英文标题】:ChangeURLshowninChromestatusbar【发布时间】:2011-09-1716:19:48【问题描述】:当我将鼠标悬停在Chrome中的某个网址上时,该网址会显示在Chrome状态栏中。在我的情况下,这会导致一个丑陋的ja... 查看详情

chrome谷歌浏览器如何导入或导出书签

chrome谷歌浏览器导入或导出书签方法:1、打开谷歌浏览器Chrome,点击右上角的菜单图标,依次进入到“书签”--“书签管理器”2、在打开的书签管理页面,点击上方的“整理”按钮,点击下方的“将书签导出到HTML文件”3、会弹... 查看详情

在浏览器的地址栏中输入url后发生了什么

...的事情,通过这个我们可以更好地理解http请求。  在浏览器的地址栏中输入url后会经历下面的步骤:  第一步:进行域名解析---浏览器搜索自身的DNS缓存,如果有缓存,再看有没有过期,如果没过期,就是用这个ip,如果过... 查看详情

如何在 React Router v5 中更新 URL 并替换历史状态而不重新渲染整个应用程序?

...间】:2021-01-1309:34:16【问题描述】:在使用ReactRouter及其浏览器历史记录时,有几种情况会触发重新渲染,我不想重新渲染整个应用程序:使 查看详情

如何删除 URL 中的参数并将其显示在地址栏中而不会导致 Javascript 中的重定向?

】如何删除URL中的参数并将其显示在地址栏中而不会导致Javascript中的重定向?【英文标题】:HowtoremoveparametersinURLanddisplayitinaddressbarwithoutcausingredirectinJavascript?【发布时间】:2012-01-2014:20:58【问题描述】:我找到了很多关于如何... 查看详情