如何根据URL和时间范围删除特定的浏览器历史记录项

How to delete a specific browser history item based on URL and time range

我正在尝试使用 chrome.history 删除我的扩展程序在后台自动访问的某些特定访问 window。

我发现至少有一个 couple ways 可以做到这一点:

  1. chrome.history.deleteUrl(url):需要 URL 并删除所有出现的地方。

  2. chrome.history.deleteRange(range):需要 startTimeendTime 并删除该范围内的所有 URL。

如何将两者结合起来删除具有特定 URL 和时间范围的浏览器历史记录访​​问?

或者是否有另一种或许更好的方法来完全解决这个问题。例如主动设置侦听器以删除 URLs,同时使用上述功能和 chrome.history.onVisited.addListener.

的某些组合自动浏览它们

谢谢!

Chrome API 没有提供按 URL 和日期删除历史记录项的方法。您只能通过 chrome.historychrome. browsingData 访问历史记录,并且都无法以这种方式查询历史记录项。

我认为您最好的选择是使用您提到的 chrome.history.onVisited.addListener 方法。由于您的扩展正在访问网站,因此您知道要检查哪些 url。假设您只需要删除在扩展名 运行 时创建的历史记录项,您可以使用类似...

chrome.history.onVisited.addListener((res) => {
    if (res.url === 'someurl') {
        const t = res.lastTimeVisisted;

        // You might need to play with the end time
        chrome.history.deleteRange({
            startTime: t,
            endTime: t
        });
    }
})

这是我想出的,您可以 运行 在 background 控制台中进行测试。它设置一个侦听器,打开一个新选项卡,侦听器检查 url 匹配项,然后删除新的历史记录项。最后,它会进行历史搜索以确认该项目已被删除:

var url = 'http://whosebug.com'

// Get current window
chrome.windows.getCurrent(function(win) { 

    // Add temporary listener for new history visits
    chrome.history.onVisited.addListener(function listener(historyItem) {

        // Check if new history item matches URL
        if (historyItem.url.indexOf(url) > -1) {

            console.log('Found matching new history item', historyItem)
            var visit_time = historyItem.lastVisitTime

            // Delete range 0.5ms before and after history item
            chrome.history.deleteRange({
                startTime: visit_time - 0.5, 
                endTime: visit_time + 0.5
            }, function() { 
                console.log('Removed Visit', historyItem)

                // Get history with URL and see if last item is listed
                chrome.history.search(
                    {text:'Whosebug'}, 
                    function(result) { 
                        console.log('Show History is deleted:', result) 
                    } )

            });
            chrome.history.onVisited.removeListener(listener)
        }
    });

    // Create new tab
    chrome.tabs.create({ 
        windowId: win.id,
        url: url,
        active: false
    }, function(tab) {
        console.log('Created tab')
    }) 
});

仅使用 visit_time,因为 startTimeendTime 都不适合我。不过,这似乎不太可能删除比新条目更多的内容。