我試圖找到一個好方法來檢測窗口的名稱已更改。這是很容易與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腳本運行(至少在我嘗試過的任何變體中)似乎無法覆蓋窗口行爲。