我正在尝试使用带有弹出页面的浏览器操作访问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次访问。我怎么能有一堆没有访问的页面? 我做错了什么?
答案 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