Доступ к файлам 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 к разрешениям в манифесте исправило это.