我正在尝试创建一个小的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的方式,这是我关心的主要问题。