我目前正在开发一个扩展,它将提供比标准 Edge 历史记录页面更好的替代方案。为了访问历史记录,我使用了 chrome.history,正如我之前所想的那样,它解决了我的问题
我目前正在开发一个扩展,它将提供比标准 Edge 历史记录页面更好的替代方案。为了访问历史记录 chrome.history
,我使用了,正如我之前所想的那样,它解决了我的问题。但是,当我增加 maxResults
查询的属性时,在某个时候它只是停止返回更多结果(大约 100 个,我肯定有超过 100 个历史记录项),从中我得出结论,它只返回上次启动浏览器后添加的项目。我通过重新启动浏览器确认了这一点,并看到了一个空的结果。目前,我正在使用这段代码来获取历史记录项:
function displayHistory(items, filter, main) {
items.processingDone = false;
chrome.history.search(
{
text: filter,
maxResults: 1000
},
(history) => {
undisplayAll(items, main);
for (const i of history) {
displayItem(items, i, main);
}
items.processingDone = true;
}
);
}
问题是: 如何访问整个历史记录?
您可以尝试承诺 API 调用:
function fetchHistoryPage(startTime, endTime, pageSize) {
return new Promise((resolve, reject) => {
chrome.history.search({
text: '',
startTime: startTime,
endTime: endTime,
maxResults: pageSize
}, function(results) {
if (chrome.runtime.lastError) {
reject(chrome.runtime.lastError);
} else {
resolve(results);
}
});
});
}
然后实现分页调用:
const MILLIS_PER_DAY = 1_000 * 60 * 60 * 24;
let pageSize = 100; // items per page
let currentPage = 0;
async function getNextPage() {
let now = Date.now();
let startTime = now - (currentPage + 1) * MILLIS_PER_DAY; // 1 day earlier
let endTime = now - currentPage * MILLIS_PER_DAY;
try {
let results = await fetchHistoryPage(startTime, endTime, pageSize);
if (results.length) {
currentPage++; // Only when there are results
return results;
} else {
console.log('No more history items.');
}
} catch (error) {
console.error('Error fetching history:', error);
}
return null;
}
使用方法如下:
(async () => {
const allResults = [];
let results;
do {
results = await getNextPage();
if (results) {
allResults.push(...results);
}
} while(results);
// Do something with allResults
})();