如何获得Stackoverflow/Stackexchange - 如标记悬停工具提示?

Lor*_*uer 5 css jquery user-interface tooltip

将鼠标悬停在Stackoverflow上的标记上时,将显示工具提示,如下所示.这可能是通过jquery.append实现的,因为它在HTML文档的最末端插入了HTML代码.在每次悬停事件后,经过一段时间延迟后,会发出一个AJAX请求,可能是通过jquery.load(...)

发送到webapps.stackexchange.com的url查询例如是_ = 1318962590136,这是一个动态Id.

  • 1)这如何在客户端和服务器端工作,有什么好处?

toolip的有效负载是HTML,如下所示:

<div><div class="tm-heading">...</div></div><span>.......</span>
Run Code Online (Sandbox Code Playgroud)

离开标记后,将删除动态加载的HTML.css样式已经存在于stackoverflow站点的已加载的css表中.

  • 2)最初声明的事件似乎没有附加到<a>构成标记的样式化链接元素.似乎只声明了mousedown事件(通过Chrome检查).

JavaScript-DeObfuscator提供了一些线索:动态添加和删除事件侦听器......

function (a, b, c) {
    a.removeEventListener && a.removeEventListener(b, c, !1);
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Vet*_*elS 2

通过仅在用户触发悬停事件时更新数据,这意味着您不必每隔 x 秒不断查询数据库。这种方法完全浪费资源,尤其是当您需要极其最新的信息时,每秒都可能会调用服务器。

但更好的方法(甚至比您在问题中讨论的方法更好)是一种称为 Comet 的方法。Comet简单来说就是客户端向服务器发出请求,然后等待服务器响应(即服务器上的数据更新时)。这意味着只有当有更新的数据要推送到客户端时才会调用服务器。例如,(我相信)Facebook 就是这样运作的。