chrome访问浏览器历史记录

时间:2010-12-20 01:09:40

标签: javascript google-chrome-extension

我正在尝试使用带有弹出页面的浏览器操作访问Chrome中的浏览器历史记录。

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');

我得到234个历史记录和0次访问。我怎么能有一堆没有访问的页面? 我做错了什么?

4 个答案:

答案 0 :(得分:7)

你的代码不起作用的原因是对chrome.history的调用的异步性。

你实际上正试图在chrome.history.search返回之前迭代历史[]。这意味着那时的历史[]仍然是一个空数组。最终的console.log确实打印出超过0个历史记录吗?无论如何,这是一个竞争条件。

您需要做的是从chrome.history.search调用回调函数中的chrome.history.getVisits。

这是一种方法:

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');
});

这不是最漂亮的代码,但它有效,你可以重构它看起来更好。

我不确定您是否可以在弹出页面中访问chrome.history(在测试时让我知道),但它肯定会在后台页面中运行,您可以将结果传递给弹出窗口。

答案 1 :(得分:1)

问题是,这在webkit中不起作用(chrome,safari e.a)。缺席(遍历访问)修复了一个安全漏洞,它将访问过的链接暴露给任何网站。通过一些随机猜测,可以跟踪和描述访问者,这被视为隐私泄露。

答案 2 :(得分:1)

有一个名为ClickHint的扩展程序,它显示有关访问过的网站和网页的统计信息,包括访问次数和每个页面上花费的时间。据我所知,它需要一种从这一点开始的方法:它在你安装了扩展后并且只有在启用时才编译统计数据。也许这种方法对你也有用。

答案 3 :(得分: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))
  });

这只会给出visitCount