Как удалить определенный элемент истории браузера c на основе URL и временного диапазона - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь использовать chrome.history, чтобы удалить некоторые указанные c посещения, которые мое расширение автоматически посещает в фоновом окне.

Я обнаружил, что по крайней мере пара способов сделать это:

  1. chrome.history.deleteUrl(url): который требует URL и удаляет все его вхождения.

  2. chrome.history.deleteRange(range): для этого требуются startTime и endTime и удаляются все URL-адреса в этом диапазоне.

Как объединить два, чтобы удалить историю посещений браузера с указанным c URL и временным диапазоном?

Или есть другой, возможно, лучший способ полностью подойти к этому. Например, активная настройка слушателя на удаление URL-адресов при автоматическом просмотре их с помощью некоторой комбинации указанных выше функций и chrome.history.onVisited.addListener.

Спасибо!

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

API Chrome не предоставляет метод, который удаляет элементы истории по 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
        });
    }
})
0 голосов
/ 24 апреля 2020

Вот то, что я придумал, вы можете запустить в консоли background для тестирования. Он устанавливает слушателя, открывает новую вкладку, и слушатель проверяет соответствие URL, затем удаляет новый элемент истории. Наконец, он выполняет поиск в истории, чтобы подтвердить, что элемент был удален:

var url = 'http://stackoverflow.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:'stackoverflow'}, 
                    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 не работали для меня. Хотя вряд ли это удалит больше, чем новая запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...