2014-01-08 5 views
2

Я сейчас пробовал разные вещи, но не могу заставить его работать. Я хочу все куки, связанные с текущей вкладкой (т. Е. Также в другом домене, например, в google). Ниже приведены только те, которые соответствуют домену вкладки. Установка getAll ({}) дает мне все файлы cookie, относящиеся к любой посещаемой странице.получить все куки, связанные с текущей вкладкой

document.addEventListener('DOMContentLoaded', function() { 
    var cookies2=[]; 
    chrome.tabs.query({currentWindow:true,active:true},function(tab) { 
     console.log(tab[0]); 
     chrome.cookies.getAll({url:tab[0].url},function(cookies) { 
     for (var i in cookies) { 
      console.log(cookies[i].domain,cookies[i].path,cookies[i].name); 
     } 
     }); 
    }); 

}); 
+0

Ваш вопрос не ясен. Файлы cookie привязаны к URL-адресам, а не к вкладкам. Если вы хотите получить список файлов cookie для всех URL-адресов, для которых страница сделала запросы (включая внешние домены), вы должны перехватить http-запросы, собрать все URL-адреса, а затем вызывать 'cookies.getAll' для всех из них. – Stan

ответ

6

Что именно вы подразумеваете под «всеми куками, связанными с текущей вкладкой»?

Любой ресурс, загруженный по сети, может быть связан с файлом cookie. Если вы хотите получить куки для всех фреймов на вкладке, используйте метод chrome.webNavigation.getAllFrames, чтобы получить список URL-адресов, связанных с вкладкой. Вот очень наивный метод получения всех файлов cookie.

chrome.tabs.query({ 
    currentWindow: true, 
    active: true 
}, function(tabs) { 
    chrome.webNavigation.getAllFrames({ 
     tabId: tabs[0].id 
    }, function(details) { 
     // Get unique list of URLs 
     var urls = details.reduce(function(urls, frame) { 
      if (urls.indexOf(frame.url) === -1) 
       urls.push(frame.url); 
      return urls; 
     }, []); 
     // Get all cookies 
     var index = 0; 
     var cookies = []; 
     urls.forEach(function(url) { 
      chrome.cookies.getAll({ 
       url: url 
      }, function(additionalCookies) { 
       cookies = cookies.concat(additionalCookies); 
       if (++index === urls.length) { 
        // Collected all cookies! 
        // TODO: Use cookies. 
        // Note: The array may contain duplicate cookies! 
       } 
      }); // chrome.cookies.getAll 
     }); // urls.forEach 
    }); // chrome.webNavigation.getAllFrames 
}); // chrome.tabs.query 

предыдущий метод наивный, так как результирующий массив печенья может содержать повторяющиеся записи (например, если страница содержит http://example.com и http://example.com/index.htm, то вы получите две записи для печенья на .example.com).
Существует множество способов фильтрации дубликатов в массиве JavaScript, вы можете увидеть некоторые методы в this question.

Если вы хотите буквально получить все куки, связанные с вкладкой, вам необходимо собрать их, используя API chrome.webRequest. Используйте события webRequest для обнаружения сетевых запросов и заголовок запроса Cookie и Set-Cookie и Set-Cookie2 ответные заголовки. Вы должны вручную разобрать cookie.

Если вы хотите быстро просмотреть все файлы cookie, связанные с вкладкой (только кадры, как и первый метод), вы также можете открыть инструменты разработчика и посмотреть Ресурсы -> Файлы cookie).

(источник изображения: https://developers.google.com/chrome-developer-tools/docs/resources)

Смежные вопросы