Доступ к файлам cookie в расширении Chrome

Я пытаюсь написать расширение для Chrome, которое работает с YouTube, и мне нужен доступ к некоторой информации о файлах cookie YouTube. Кажется, я не могу заставить свое расширение видеть какие-либо файлы cookie. (Несмотря на то, что я вижу их в разделе ресурсов в разделе Chrome для разработчиков «Проверить элемент»).

Я почти уверен, что правильно настроил разрешения в файле манифеста 2, потому что, когда я беру разрешение «cookies» только для его проверки, я получаю сообщение об ошибке «Невозможно вызвать метод getAll». Моя текущая проблема заключается в том, что функция обратного вызова не возвращает файлы cookie.

{
"manifest_version": 2,
"name": "YouTube Viewer",
 "description": "This extension is for YouTube videos.",
 "version": "1.7",

 "icons": {
 "128": "ytblack.png"
 },

 "permissions": [
 "cookies",
 "https://www.youtube.com/",
 "http://www.youtube.com/",
 "tabs",
 "storage"
 ],

 "background": {
   "scripts": ["bootstrap.js"],
   "persistent": false
  },

 "page_action": {
 "default_title": "YT View",
 "default_icon": "ytblack.png",
 "default_popup": "popup.html"
 }

}

Мой манифест вызывает bootstrap.js. Внутри bootstrap.js есть вызов другого файла ytview.js, но меня это не волнует. Код в нем работает нормально. Но внутри bootstrap.js мой файл cookie.length возвращается как 0, когда я смотрю на свою консоль «фоновой страницы». Журнал «Обратный вызов для файлов cookie прошел нормально». правильно загорается. Но потом пишет "cookies.length=0". Как я уже сказал, я знаю, что файлы cookie существуют, потому что я вижу их в ресурсах.

chrome.tabs.onUpdated.addListener(function(id, info, tab){

// decide if we're ready to inject content script
if (tab.status !== "complete"){
    console.log("not yet");
    return;
}
if (tab.url.toLowerCase().indexOf("youtube.com/watch") === -1){
    console.log("you are not on a YouTube video");
    return;
}

chrome.cookies.getAll({domain: "www.youtube.com"}, function(cookies) {
console.log('Callback for cookies came in fine.');
console.log('cookies.length=' + cookies.length);        
    for(var i=0; i<cookies.length;i++) {
      console.log('cookie=' + cookies[i].name);
    }
  });
chrome.tabs.executeScript(null, {"file": "ytview.js"});

});

Любые идеи, почему файлы cookie не возвращаются? Может быть, что-то с «доменом» в выражении .getAll? Я пробовал множество комбинаций, таких как www.youtube.com, youtube.com, https://www.youtube.com безуспешно.




Ответы (2)


для будущих пользователей: youtube.com используйте «.youtube.com» в качестве домена cookie, чтобы сайт мог обмениваться файлами cookie во всех субдоменах YouTube, поэтому в вашем примере вы должны использовать доменное имя без субдомена «www», например:

chrome.cookies.getAll({domain: "youtube.com"}, function(cookies) {
  //...
});

вы можете четко видеть домен файлов cookie, используя инструменты разработчика Chrome по умолчанию

введите здесь описание изображения

person Fareed Alnamrouti    schedule 08.08.2016

Я понял. В моем манифесте я запрашивал разрешение на www.youtube.com, но файлы cookie, которые я пытался прочитать, находились просто на youtube.com без www. Добавление простого youtube.com к разрешениям в манифесте исправило это.

person Thread7    schedule 18.01.2014