我正在尝试编写与YouTube兼容的Chrome扩展程序,并且需要访问YouTube的部分Cookie信息。我似乎无法让我的扩展程序看到任何cookie。 (即使我可以在Chrome的“Inspect Element”开发者部分的资源下看到它们。)
我很确定我已经在清单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里面,当我查看我的“后台页面”控制台时,我的cookies.length返回0。 “Callback for cookies”的日志很好。正确开火但后来它说“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"});
});
为什么没有退回cookies的任何想法?也许在.getAll语句中有“domain”的东西?我尝试了很多组合,比如www.youtube.com,youtube.com,https://www.youtube.com但没有运气。
答案 0 :(得分:1)
面向未来用户: youtube.com使用“.youtube.com”作为cookie域,以允许网站在所有youtube子域中共享cookie,因此在您的示例中,您应该使用不带“www”子域的域名,例如:
chrome.cookies.getAll({domain: "youtube.com"}, function(cookies) {
//...
});
您可以使用默认的Chrome开发人员工具
清楚地看到Cookie域答案 1 :(得分:0)
我明白了。在我的清单中,我在www.youtube.com上要求许可,但我试图阅读的cookie只是在没有www的youtube.com上。将plain youtube.com添加到清单中的权限修复它。