我正在尝试创建一个小的Chrome扩展程序,以帮助找到Cookie在网站中使用的位置。通过在文档上设置cookie的getter方法,扩展名为SUPPOSE。 像这样:
document.__defineGetter__('cookie',function(){
alert("test");
});
在网站上手动输入chrome的javascript控制台,然后尝试访问Cookie(只需输入" document.cookie
")就会产生预期的行为弹出测试提示。
但是,当我将它放入chrome扩展程序并在页面的其余部分之前加载它时,它将无法工作。
这是manifest.json(我只是将soundcloud用作测试网站):
{
"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脚本运行和页面的其余部分初始化之间有时会重置它。但是,当我更改" run_at" manifest.json文件中的字段为" document_end"为了让它在文档的任何重新初始化之后运行以后有效,然后soundcloud的东西将在控制台上开始打印,显示它已正确加载页面但是我的脚本仍然没有产生效果
编辑:在建议之前。我无法使用Chrome的Cookie API,因为它无法提供实际收听时检索cookie的方式,这是我关心的主要内容。
答案 0 :(得分:1)