我正在嘗試創建一個小的Chrome擴展程序來幫助查找Cookie在網站中的使用位置。通過在文檔上設置Cookie的getter方法,擴展名爲SUPPOSE。 像這樣:爲什麼文檔獲取器功能被重置?
document.__defineGetter__('cookie',function(){
alert("test");
});
當手動投入Chrome的JavaScript控制檯在網站上,然後試圖訪問一個cookie(只需鍵入「document.cookie
」),它會導致預期的行爲它會彈出測試提示。
但是,當我把它放入一個擴展名並在頁面的其餘部分加載之前,它將無法工作。
這裏是(我只是用的SoundCloud作爲測試的網站)在manifest.json:
{
"name": "Cookie Auditor",
"version": "0.1",
"manifest_version": 2,
"description": "An extension to help examine where cookies are being used in websites.",
"content_scripts": [
{
"matches": ["*://*.soundcloud.com/*"],
"js": ["content.js"],
"run_at": "document_start"
}
]
}
這裏是content.js:
console.log(document.location);
document.__defineGetter__('cookie',function(){
alert("test");
});
console.log(document.__lookupGetter__('cookie'));
當試圖手動觸發它(document.cookie
)它只是返回正常值並且無法執行javascript。當它在這裏工作失敗時,我會對文檔位置進行檢查,以確保它在正確的域中執行並且甚至可以加載。 奇怪的部分是當你用這個擴展加載頁面時,它會打印出它在正確的域上,它甚至表明cookie getter方法被正確覆蓋(它在控制檯中打印該函數)。 但是,當您查找getter方法時,它已被重置(document.__lookupGetter__('cookie')
)。
我最後一個想法是,它正在運行我的content.js腳本和初始化頁面的其餘部分之間的某個時候被重置。但是,當我將manifest.json文件中的「run_at」字段更改爲「document_end」,試圖在文檔的任何重新初始化之後使其運行更晚且有力時,soundcloud的東西將在控制檯上開始打印,以顯示它已經正確加載頁面,但是我的腳本仍然沒有產生效果。
編輯:建議之前。我無法使用chrome的cookie API,因爲它沒有提供實際監聽cookie的方式,這是我關心的主要問題。