Расширение Chrome получить все вкладки куки - PullRequest
0 голосов
/ 30 апреля 2018

Попытка получить все куки со страницы, используя расширение Chrome.

Например, страница os https://ya.ru.

Вот мой код:

chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
    var domain = getDomain(tabs[0].url);

    chrome.cookies.getAll({
        domain: domain
    }, function(cookies) {
        console.log(cookies);
    });

});

Этот код вернет все куки (8) для домена ya.ru. Но проблема в том, что когда я открываю консоль браузера, я вижу куки не только для домена ya.ru:

enter image description here

Та же ситуация на Google и других сайтах. Итак, у меня есть несколько доменных файлов cookie на одной странице. Как получить ВСЕ куки на странице?

Спасибо за ваше время.

1 Ответ

0 голосов
/ 30 апреля 2018

Devtools показывает файлы cookie для всех URL ресурсов, запрошенных страницей ( исходный код ), поэтому мы можем сделать то же самое, обратившись к Performance API в коде сценария содержимого, который мы выполним на странице:

chrome.tabs.executeScript({
  code: 'performance.getEntriesByType("resource").map(e => e.name)',
}, data => {
  if (chrome.runtime.lastError || !data || !data[0]) return;
  const urls = data[0].map(url => url.split(/[#?]/)[0]);
  const uniqueUrls = [...new Set(urls).values()].filter(Boolean);
  Promise.all(
    uniqueUrls.map(url =>
      new Promise(resolve => {
        chrome.cookies.getAll({url}, resolve);
      })
    )
  ).then(results => {
    // convert the array of arrays into a deduplicated flat array of cookies
    const cookies = [
      ...new Map(
        [].concat(...results)
          .map(c => [JSON.stringify(c), c])
      ).values()
    ];

    // do something with the cookies here
    console.log(uniqueUrls, cookies);
  });
});

Важные примечания:

  • Ваш файл manifest.json должен иметь "<all_urls>" в "permissions" или явный список шаблонов сопоставления URL, которые позволят получить соответствующие результаты в chrome.cookies.getAll.

  • Приведенный выше код дедупликации файлов cookie может быть медленным при наличии тысяч файлов cookie.

  • Мы читаем куки для URL, а не для домена, потому что это единственный надежный способ получить всеобъемлющий куки (imgur.com) для чего-то вроде i.stack.imgur.com

...