我想在我的Chrome扩展中重写document.cookie,并且在获取原始document.cookie功能的同时也遇到了很多麻烦。目前,我有这样的:在Google Chrome扩展中安全地覆盖document.cookie
var _cookie = document.cookie;
document.__defineSetter__("cookie", function(the_cookie) {_cookie=the_cookie;});
document.__defineGetter__("cookie", function() {return _cookie;});
我从内容脚本中使用的技术从here注入JS。
我看到的行为是我重新定义的setter和getter被调用,但原始函数不再有效。例如,我可以使用开发工具检查_cookie和document.cookie,看看它们是否具有相同的期望值,但Chrome的cookie存储中没有出现任何cookie。
任何人都可以告诉我我是如何打破原来的document.cookie功能?是document.cookie是一个属性的问题,所以我实际上并没有得到一个指向原始setter的指针?
我理解,但我的希望是,分配不变的document.cookie一个变量,并且然后在我的覆盖中引用它会调用原始设置器。你能解释一下这个假设的错误吗?或者我可以如何访问未改变的setter? – bryophyte 2012-04-13 14:54:09
允许我进一步理解,为什么要首先覆盖get/set方法? – 2012-04-13 14:55:44
我正在编写一个扩展,重命名cookie以防止跨域cookie跟踪。基本上,它拦截传输中的cookie头并决定是否发送它们。使用Chrome扩展webrequest API可以轻松处理HTTP Cookie,但是我没有收到针对JS cookie的传入“Set-Cookie”标头。我的解决方案(可能很疯狂)是重写document.cookie方法,以便在调用setter时调用并重命名cookie。 – bryophyte 2012-04-13 15:41:52