Skip to content

Instantly share code, notes, and snippets.

@bdkosher
Last active August 29, 2015 14:06
Show Gist options
  • Save bdkosher/9db8d9395955a3c4b372 to your computer and use it in GitHub Desktop.
Save bdkosher/9db8d9395955a3c4b372 to your computer and use it in GitHub Desktop.
Scans an object tree looking for references to Windows or DOM Nodes. TODO: handle stack overflows, function scope?
var isWindowOrNode = function (obj, callback, callbackArg) {
var result = false;
if (obj != null) {
if (obj instanceof Window) {
callback(obj, callbackArg);
result = true;
} else if (obj instanceof HTMLDocument) {
callback(obj.defaultView, callbackArg);
result = true;
} else if (obj instanceof HTMLElement) {
callback(obj.ownerDocument.defaultView, callbackArg);
result = true;
}
}
return result;
};
var logWindowInfo = function(window, propName) {
console.log(propName + ' references window ' + window.name);
};
var findWindowRefs = function (obj, keyFilter, _parentKey) {
var propName = _parentKey === undefined ? '' : _parentKey
winOrNode = isWindowOrNode(obj, logWindowInfo, propName);
if (!winOrNode && ((typeof obj) === 'object')) {
Object.keys(obj).forEach(function (key) {
var fqKey = propName === '' ? key : propName + '.' + key,
val;
if (!keyFilter || (keyFilter && keyFilter(key, fqKey))) {
try {
val = obj[key];
} catch (e) {
console.log('unable to read value of ' + fqKey);
}
if (val != null) {
findWindowRefs(val, keyFilter, fqKey);
}
}
});
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment