Я попытался изменить свой код, чтобы он был похож на этот отвечать.
Здравствуйте, мой код, похоже, возвращает пустой массив при попытке асинхронного использования 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... не отображается в консоли. Я не уверен, что я сделал не так, мне кажется, что я сделал все правильно. Я новичок в асинхронном кодировании, поэтому небольшая помощь будет оценена. Спасибо!
@wOxxOm Я пробовал это, и все равно не повезло. Он возвращает массив с длиной 0 по-прежнему.
Вероятно, это означает, что для этого URL-адреса не было файлов cookie.
@wOxxOm Спасибо, что сказали это, это напомнило мне, что мне нужно добавить разрешения http и https в мой манифест.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я нашел проблему! Оказывается, у меня не были установлены правильные разрешения в моем манифесте, и я настроил код для использования 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...')
});
});
Вместо console.info(cookie) используйте
callback(cookie). Но я рекомендую использовать Полифил Mozilla WebExtension. См. также Как вернуть ответ на асинхронный вызов?