1

这个问题已经被问过很多次了,但大多数问题都是老问题。

我尝试了几种不同的技术:

a:visited {} /* read computed style - always returns :link color*/
a:visited {} /* set height and measure that, turns out you can only set various colors */
a:link:after { content:"abc"} /* tried various styles */
/* the same restrictions apply when dealing with nested/child elements */

我尝试拍摄 div 的“屏幕截图”并将其放入画布中,以便以这种方式获得像素颜色。

我考虑过将半透明的 div 悬停在锚点上,并以某种方式使用它来测量颜色。

我已经尝试从您想要嗅探的站点加载样式表并计时它需要多长时间(在第一次/第二次/...加载时),但结果很奇怪(有时它第一次加载速度更快,就像它实际上更快网络比本地缓存或其他东西)。

<script>
    var t = new Date().getTime();
</script>
<link id="test" rel="stylesheet" type="text/css" href="http://l.yimg.com/zz/combo?nn/lib/metro/g/breakingnews/breakingnews_0.0.49.css" />
<script> 
    document.getElementById("test").onload = function () {              var ft = ((new Date().getTime()) - t) + "ms";
        alert(ft);
    };
</script>

Mozilla 在此处概述了这些安全限制的原因和方式。

历史嗅探是完全不可能的吗?如果是的话,是否有任何标准/公认/用户友好的方式来做到这一点?

4

2 回答 2

1

正如@boisvert 所指出的,这是对隐私的侵犯。这曾经是可能的,但在最近的浏览器版本上是不可能的。尝试将点击的链接保存在 localStorage 上并稍后检查可能会更好。它不是 100% 有效,但在浏览器端使用 javascript,您永远不会 100%。

作为站点节点,或者您可能希望在服务器端进行。那将是100%有效的。

于 2013-04-21T21:59:22.437 回答
1

正如评论所强调的那样,您将无法获得浏览器历史信息 - 至少,如果浏览器的设计符合预期 - 因为这是对隐私的侵犯。

有一些有限的选择:

  • history对象具有back,forwardlength在当前窗口或框架中前后导航的方法;但是(再次隐私)它是可读的,所以你不能做类似的事情 x = window.history[0]
  • 使用 cookie(或会话),您可以维护您网站上的导航历史记录,并依靠该信息实现用户友好的功能,仅限于您读取 cookie/会话数据的网站。
  • 我们可以想象一个多站点版本,首先通过一个中央站点重定向每个链接,该站点将记录历史,并且该站点托管一个 javascript 库,为访问的链接提供功能。它仍然依赖于通过中心位置重定向的每个链接来保存历史记录:因此它仅适用于同意这样做的站点。
于 2013-04-21T12:08:25.113 回答