Proxy , window , , .
window , , .
Proxy, window, watch Firefox, , Firefox (, ), . V8- Object.observe window , Chrome V8.
, window:
let oldProps;
setInterval(() => {
console.time('Polling window');
let newProps = Object.getOwnPropertyNames(window);
if (oldProps) {
let addedProps = newProps.filter(prop => oldProps.indexOf(prop) < 0 );
console.log('Added props', addedProps);
}
oldProps = newProps;
console.timeEnd('Polling window');
}, 500);
, , filter , indexOf , .
Raw for while - :
let oldProps;
setInterval(() => {
console.time('Polling window');
let newProps = Object.getOwnPropertyNames(window).sort();
if (oldProps) {
for (let oldI = 0, newI = 0; oldI < oldProps.length || newI < newProps.length; oldI++, newI++) {
let oldProp = oldProps[oldI];
let newProp = newProps[newI];
if (newProp > oldProp || newProp === undefined) {
newI--;
console.log('Removed prop', oldProp);
} else if (newProp < oldProp || oldProp === undefined) {
oldI--;
console.log('Added prop', newProp);
}
}
}
oldProps = newProps;
console.timeEnd('Polling window');
}, 500);