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

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

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

{
"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 мой cookies.length возвращается как 0, когда я смотрю на консоль "фоновой страницы". Журнал "Обратный звонок для печенья пришел в порядке". срабатывает правильно. Но тогда он говорит "cookies.length=0". Как я уже сказал, я знаю, что куки существуют, потому что я вижу их в ресурсах.

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) {
  //...
});

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

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

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