我目前正在开发一个扩展,它将为标准 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 > 0) {
return results;
currentPage++;
} else {
console.log('No more history items.');
}
} catch (error) {
console.error('Error fetching history:', error);
}
return null;
}
// Example usage:
(async () => {
await getNextPage(); // Fetch page #1
await getNextPage(); // Fetch page #2
})();