Как использовать chrome.cookies.getAll асинхронно?

Я попытался изменить свой код, чтобы он был похож на этот отвечать.

Здравствуйте, мой код, похоже, возвращает пустой массив при попытке асинхронного использования chrome.cookies.getAll. Возможно, я использую его неправильно или url не проходит.

chrome.history.onVisited.addListener(function(HistoryItem) {
    var cookies = {
        start: function(callback) {
            this.logCookies(HistoryItem.url,callback);
        },
        logCookies: function(url,callback) {
            chrome.cookies.getAll({
                'url': url
            }, function(cookie) {
                console.info(cookie) //log the cookie
            });
        }
    }
    cookies.start(function() {
        console.info('getting cookies...')
    });
});

Я надеюсь, что это не слишком расплывчато... я пытаюсь получить все файлы cookie с текущего посещаемого веб-сайта и зарегистрировать их. (Я надеюсь удалить их в будущем, но сейчас я хотел бы регистрировать каждый найденный файл cookie). Вместо этого он возвращает пустой массив длиной 0, а getting cookies... не отображается в консоли. Я не уверен, что я сделал не так, мне кажется, что я сделал все правильно. Я новичок в асинхронном кодировании, поэтому небольшая помощь будет оценена. Спасибо!

Вместо console.info(cookie) используйте callback(cookie). Но я рекомендую использовать Полифил Mozilla WebExtension. См. также Как вернуть ответ на асинхронный вызов?

wOxxOm 18.02.2019 06:05

@wOxxOm Я пробовал это, и все равно не повезло. Он возвращает массив с длиной 0 по-прежнему.

johnboy13 18.02.2019 19:28

Вероятно, это означает, что для этого URL-адреса не было файлов cookie.

wOxxOm 18.02.2019 19:29

@wOxxOm Спасибо, что сказали это, это напомнило мне, что мне нужно добавить разрешения http и https в мой манифест.

johnboy13 18.02.2019 19:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
846
1

Ответы 1

Я нашел проблему! Оказывается, у меня не были установлены правильные разрешения в моем манифесте, и я настроил код для использования Promises, и он работает совершенно нормально! Я также получил его, чтобы удалить каждый файл cookie.

chrome.history.onVisited.addListener(function(HistoryItem) {
    var cookies = {

        start: function() {
            return this.logCookies();
        },

        logCookies: function() {

            return new Promise(function(resolve,reject){

                function remove(cookies){
                    for (var i = 0; i < cookies.length; i++) {
                        chrome.cookies.remove({url: HistoryItem.url + cookies[i].path, name: cookies[i].name},function(){
                            console.info('cookie removed!')
                        });
                    }
                    resolve()
                }

                chrome.cookies.getAll({
                    'url': HistoryItem.url
                }, function(cookies) {
                    remove(cookies)
                });

            })
        }
    }

    cookies.start().then(function(){
        console.info('removing cookies...')
    });

});

Другие вопросы по теме