2010-12-20 11 views
2

Ich versuche, in meinem Browser-Verlauf in Chrom zugreifen, mit einer Browser-Aktion mit einer Popup-Seite.Chrom Zugriff Browser Geschichte

var histories = []; 
var visits = []; 

chrome.history.search({'text':'', 'maxResults':0}, function(historyItems){ 
    for(var h in historyItems){ 
     histories.push({'id': h.id, 'url':h.url}); 
    } 
}); 

for(var h in histories){ 
    chrome.history.getVisits({'url': h.url, function(visitItems){ 
     for(var v in visitItems){ 
      var id = v.id; 
      var visitId = v.visitId; 
      var visitTime = v.visitTime; 
      var referringVisitId = v.referringVisitId; 
      var transition = v.transition; 
      visits.push({'id': v.id, 'visitId': v.visitId, 'visitTime': v.visitTime, 'referringVisitId': v.referringVisitId, 'transition':v.transition}); 
     } 
    }); 
} 

console.log(histories.length + ' histories'); 
console.log(visits.length + ' visits'); 

Ich bekomme 234 Geschichten und 0 Besuche als Ergebnis. Wie kann ich eine Reihe von Seiten ohne Besuche haben? Was mache ich falsch?

+0

Was * * nicht in Ordnung ist? Was funktioniert nicht? –

+0

Um zu beginnen, müssen Ihre ersten 2 Zeilen beenden Semikola – Yahel

+0

Ich bekomme 234 Geschichten und 0 Besuche. Ich hatte viel mehr Besuche erwartet als Geschichten. – lowerkey

Antwort

1

Das Problem ist, das funktioniert nicht mehr im Webkit (Chrome, Safari e.a). Durch die Abwesenheit (durch die Besuche) wird ein Sicherheits-Bug behoben, der die besuchten Links einer beliebigen Website zugänglich macht. Mit etwas Zufallsraten war es möglich, Besucher zu verfolgen und zu profilieren, was als Datenschutzverletzung galt.

+0

Der Mozilla-Bug kann hier gelesen werden: http://hacks.mozilla.org/2010/03/privacy-related-changes-coming-to-css-vistited/ Dies wird auch in der nächsten Firefox-Version implementiert werden. – xiffy

+0

Also, wie schreibe ich meine eigene Geschichte Seite. Es wird nicht davon ausgegangen, dass es auf einer Website läuft, sondern in einer Erweiterung. Daher benötigt es die "History" -Berechtigungen im Manifest, also sollte es dem Benutzer überlassen bleiben. – lowerkey

+0

Der Mozilla-Bug beschreibt css: visited, zeigen die history.getVisits das gleiche Verhalten? – lowerkey

1

Es gibt eine Erweiterung namens ClickHint, die Statistiken zu besuchten Websites und Seiten enthält, einschließlich der Anzahl der Besuche und der auf jeder Seite verbrachten Zeit. Soweit ich weiß, bedarf es eines Ansatzes von jetzt an: Er kompiliert die Statistiken nach der Installation der Erweiterung und nur solange sie aktiviert ist. Vielleicht wird diese Methode auch für Sie funktionieren.

+0

Danke für die Info. Was mir an der getVisits-Funktion besonders gefallen hat, war, dass sie mir zeigt, wie die Verlaufsseiten miteinander verknüpft sind (ob der Benutzer auf einen Link geklickt hat, um auf eine Seite zu gelangen). Ist ClickHint dafür zuständig? – lowerkey

7

Der Grund, warum Ihr Code nicht funktioniert, ist die asynchrone Art der Aufrufe von chrome.history.

Sie versuchen tatsächlich, die Historien [] VOR der Rückgabe von chrome.history.search zu durchlaufen. Dies bedeutet, dass histories [] an diesem Punkt immer noch ein leeres Array ist. Kann die console.log am Ende tatsächlich mehr als 0 Geschichten ausgeben? Wie auch immer, es ist ein Rennzustand an diesem Punkt.

Sie müssen chrome.history.getVisits innerhalb der Callback-Funktion von chrome.history.search aufrufen.

Hier ist eine Möglichkeit, es zu tun:

var histories = []; 
var visits = []; 

chrome.history.search({text:'', maxResults:0}, function(historyItems) { 
    var historiesProcessed = 0; 
    for (var i = 0; i < historyItems.length; i++) { 
     histories.push(historyItems[i]); 
     chrome.history.getVisits({url: historyItems[i].url}, function(visitItems) { 
      for (var i = 0; i < visitItems.length; i++) { 
       visits.push(visitItems[i]); 
      } 
      historiesProcessed++; 
      if (historiesProcessed === historyItems.length) { 
       console.log(visits.length + ' visits'); 
      } 
     }); 
    } 
    console.log(histories.length + ' histories'); 
}); 

Es ist nicht das schönste Code, aber es funktioniert und Sie können es Refactoring schöner aussehen.

Ich bin mir nicht sicher, ob Sie auf chrome.history innerhalb einer Popup-Seite zugreifen können (lassen Sie mich wissen, wenn Sie es testen), aber es wird definitiv von der Hintergrundseite funktionieren und Sie können die Ergebnisse an das Popup übergeben.

0
chrome.history.search({ 
'text': '',    // Return every history item.... 
'startTime': oneWeekAgo // that was accessed less than one week ago. 
    }, 
    function(historyItems) { 
     console.log(historyItems); 
     document.write(JSON.stringify(historyItems)) 
    }); 

Dies gibt nur die BesuchsZählwert

Verwandte Themen