【发布时间】:2014-09-05 23:25:50
【问题描述】:
我需要听一些事件(如果它当然存在的话)以了解何时将新属性添加到 window 对象。这可能吗?
例如:
我在应用程序中有一个代码不知道某些库公开了哪些全局变量(例如,underscore.js 公开了全局 _ 而不是 underscore)。我需要收到通知,新属性已分配给 window。
【问题讨论】:
标签: javascript window dom-events
我需要听一些事件(如果它当然存在的话)以了解何时将新属性添加到 window 对象。这可能吗?
例如:
我在应用程序中有一个代码不知道某些库公开了哪些全局变量(例如,underscore.js 公开了全局 _ 而不是 underscore)。我需要收到通知,新属性已分配给 window。
【问题讨论】:
标签: javascript window dom-events
有两种方法可以尝试,但都不是很好的选择。
您可以使用setInterval 检查对window 对象的更改。这会很慢,并且在将新属性添加到 window 和您的代码注意到它之间会有延迟。下面是一些代码,显示了 一种 这样做的方式:http://jsbin.com/vubew/1/edit?js,console
(function(){
'use strict';
var keys = Object.keys(window).join();
setInterval(function(){
var newKeys = Object.keys(window).join();
if (newKeys !== keys) {
console.log('`window` changed');
keys = newKeys;
}
}, 100);
})();
你可以使用 ES7 的 Object.observe 方法。不幸的是,目前只有 Chrome 支持它(在实验性标志后面)。
一旦您确定其中一种方法发生了变化,您就会生成一个您的代码将要监听的事件。
【讨论】: