2013-04-11 111 views
1

這個問題已被問了很多次,但大多數問題都是舊的。使用Javascript獲取瀏覽器歷史記錄?

我嘗試了好幾種不同的技術:

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

歷史嗅探完全不可能,如果有的話,是否有任何標準/接受/用戶友好的做法?

+3

一個用戶友好的瀏覽器隱私漏洞利用? – 2013-04-11 22:02:34

+0

用戶友好的解決方案必須是合法的。但是利用解決方案可能是任何東西。 – user1873073 2013-04-11 22:45:06

+0

難道你不能(1)用ex id =「mytest」創建一個隱藏的測試div,並把它放到你的html DOM中,(2)創建一個新的css「#mytest a:visited {...}」,( 3)創建一個新的「a」DOM元素,(4)將它的href設置爲你想要嗅探的站點的URL,(5)將它附加到div,(6)然後測試它的樣式以知道它是否已經是否參觀過?我在這裏找到了這種方式:http://stackoverflow.com/questions/1584850/is-it-possible-to-get-anchor-visited-state-from-javascript – Ricola3D 2013-04-19 15:08:11

回答

1

正如評論所強調的那樣,您將無法獲得瀏覽器歷史信息 - 至少,不是因爲瀏覽器的設計是因爲它們應該 - 因爲這是違反隱私的。

有一些有限的選項:

  • history對象具有backforwardlength方法 導航回到和向前在當前窗口或幀;但(隱私 再次)是可讀的,所以你不能做這樣的事情 x = window.history[0]
  • 使用Cookie(或會話),你可以保持導航歷史您的網站,並依賴於信息的用戶友好功能,有限到您讀取Cookie /會話數據的網站。
  • 我們可以想象一個多站點版本,首先通過中心站點重定向每個鏈接,這會記錄歷史記錄,並且該站點託管一個爲訪問鏈接提供功能的JavaScript庫。它仍然依靠每個通過中心位置重定向的鏈接來保存歷史記錄:所以它只適用於同意這一點的網站。
1

正如@boisvert指出的那樣,這是違反隱私的行爲。這曾經是可能的,但不是最近的瀏覽器版本。嘗試將localStorage上的點擊鏈接保存並稍後檢查可能會更好。這不是100%有效,但在瀏覽器端使用JavaScript,你絕不會100%。

作爲一個網站節點,或者你可能想要做它的服務器端。那將是100%有效的。