8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

通过扩展 API 访问 Chromium 浏览器中的历史记录

Sarika Parakala 2月前

37 0

我目前正在开发一个扩展,它将提供比标准 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;
        }
    );
}

问题是: 如何访问整个历史记录?

帖子版权声明 1、本帖标题:通过扩展 API 访问 Chromium 浏览器中的历史记录
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Sarika Parakala在本站《javascript》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 您可以尝试承诺 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
    })();
    
  • 如果无法解决获取超过 100 条历史记录的问题。也许您可以将历史记录保存在扩展存储中。我一直希望有一个扩展,可以将页面的 URL、日期和关键字保存到 sqlite 数据库中,并提供对存储的信息的搜索,例如

  • -1 会导致错误,0 则不会显示任何内容(我见过一个 SO 问题,其中提到使用 0 会导致返回所有项目 - 这不是真的),我会尝试 null,但我真的很怀疑,似乎它旨在仅返回当前会话中的项目

返回
作者最近主题: