2011-03-05 96 views
1

我試圖找到一個好方法來檢測窗口的名稱已更改。這是很容易與setInterval這樣做:檢測到更改爲window.name

var old_name = window.name; 
var check_name = function() { 
    if(window.name != old_name) { 
     console.log("window name changed to "+window.name); 
     old_name = window.name; 
    } 
} 
setInterval(check_name, 1000); 

然而,setInterval比一個小哈克更多,可能會隨時間延遲顯著(在這種情況下,1秒)檢測更改。有沒有什麼事件或JS的聰明點,當窗口名稱更改時可以觸發一個函數?

謝謝! 約瑟夫Mastey


編輯:

不幸的是,我並沒有對將要改變窗口的名稱,這是一種方式行使的整個點代碼控制。看過evercookie和其他關於在窗口名稱中存儲數據的文章作爲跟蹤用戶的方式,我已經認定這不是我真正接受的。所以,我正在創建一個Greasemonkey腳本(實際上是一個Gremonmonkey腳本的Chromium版本)來防止這種數據泄露。另外,我確實發現了Chromium實現的一些神奇功能,這些功能對我想要的東西有很長的路要走。 JS提供神奇的getter和setter可以這樣使用:

window.__defineSetter__("name", function(nm) { console.log("intercepted window.name attempt: "+nm); }); 
window.__defineGetter__("name", function() { return ""; }); 

如果我在控制檯上運行此,我可以成功地劫持設置窗口的名字。但是,將此代碼作爲Chromium腳本運行(至少在我嘗試過的任何變體中)似乎無法覆蓋窗口行爲。

回答