如何根据URL和时间范围删除特定的浏览器历史记录项
How to delete a specific browser history item based on URL and time range
我正在尝试使用 chrome.history
删除我的扩展程序在后台自动访问的某些特定访问 window。
我发现至少有一个 couple ways 可以做到这一点:
chrome.history.deleteUrl(url)
:需要 URL 并删除所有出现的地方。
chrome.history.deleteRange(range)
:需要 startTime
和 endTime
并删除该范围内的所有 URL。
如何将两者结合起来删除具有特定 URL 和时间范围的浏览器历史记录访问?
或者是否有另一种或许更好的方法来完全解决这个问题。例如主动设置侦听器以删除 URLs,同时使用上述功能和 chrome.history.onVisited.addListener
.
的某些组合自动浏览它们
谢谢!
Chrome API 没有提供按 URL 和日期删除历史记录项的方法。您只能通过 chrome.history
或 chrome. 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
,因为 startTime
和 endTime
都不适合我。不过,这似乎不太可能删除比新条目更多的内容。
我正在尝试使用 chrome.history
删除我的扩展程序在后台自动访问的某些特定访问 window。
我发现至少有一个 couple ways 可以做到这一点:
chrome.history.deleteUrl(url)
:需要 URL 并删除所有出现的地方。chrome.history.deleteRange(range)
:需要startTime
和endTime
并删除该范围内的所有 URL。
如何将两者结合起来删除具有特定 URL 和时间范围的浏览器历史记录访问?
或者是否有另一种或许更好的方法来完全解决这个问题。例如主动设置侦听器以删除 URLs,同时使用上述功能和 chrome.history.onVisited.addListener
.
谢谢!
Chrome API 没有提供按 URL 和日期删除历史记录项的方法。您只能通过 chrome.history
或 chrome. 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
,因为 startTime
和 endTime
都不适合我。不过,这似乎不太可能删除比新条目更多的内容。