我想在我的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