使用Javascript获取浏览器历史记录?

时间:2013-04-11 21:51:41

标签: css browser-history sniffing

这个问题已被多次询问,但大部分问题都是陈旧的。

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

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概述了这些安全限制的原因和方法here

历史嗅探是否完全不可能,如果有,是否有任何标准/接受/用户友好的方式?

2 个答案:

答案 0 :(得分:1)

正如评论所强调的那样,您将无法获取浏览器历史记录信息 - 至少,如果浏览器的设计不符合要求,则不会 - 因为这是违反隐私的行为。

有一些有限的选择:

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

答案 1 :(得分:1)

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

作为站点节点,您可能还想在服务器端执行此操作。这将是100%有效。