2

我正在嘗試編寫一個適用於YouTube的Chrome擴展程序,並且需要訪問YouTube的某些Cookie信息。我似乎無法讓我的擴展程序看到任何cookie。 (儘管我可以在Chrome的「Inspect Element」開發者部分的資源下看到它們)。訪問Chrome擴展程序中的Cookie

我很確定我已經在manifest 2文件中正確設置了權限,因爲當我拿出「cookies」權限來測試它時,我收到一個錯誤,提示「Can not call method'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。 「回撥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語句中帶有「domain」的東西?我嘗試了很多組合,例如www.youtube.com,youtube.com,https://www.youtube.com,但沒有運氣。

回答

0

我想通了。在我的清單中,我要求在www.youtube.com上獲得許可,但我試圖閱讀的cookies只是在沒有www的情況下在youtube.com上。將純粹的youtube.com添加到清單中的權限中修復它。

1

未來用戶: youtube.com使用「.youtube.com」作爲cookie域,以允許該網站跨所有YouTube子域共享Cookie,因此在您的示例中,您應該使用不帶'www'子域的域名,例如:

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

使用默認的Chrome開發者工具,你可以清楚地看到餅乾域

enter image description here