Last active
August 29, 2015 14:06
-
-
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?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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