场景:我正在尝试使用复杂的API来找出现有的HTML / JavaScript网站。它为window
对象添加了几个属性。我只想枚举那些不是内置或默认的属性(例如,排除window.location
,window.parent
等。)
是否有惯用的JavaScript方法来执行此操作?我想过在一个空白的HTML页面中做一个浅拷贝,然后在枚举真实的那个时候以某种方式“减去”这些属性。
理想情况下,我想要一种方法将对象转储到控制台或监视器中,好像没有常规window
属性存在,只有那些添加了JavaScript源。
答案 0 :(得分:5)
这是我在评论中建议的详细版本:
window.preexistingkeys = [];
for (var key in window) window.preexistingkeys.push(key);
// your convoluted api here
for (var key in window) {
if (window.preexistingkeys.indexOf(key)==-1) console.log(key, window[key]);
}
请注意,您可以在导入外部脚本之前,在页面标题的开头执行第一部分。 Here's a sample
答案 1 :(得分:2)
扩展dystroy's answer,如果您无法在api之前执行代码,您可以动态创建一个新窗口来获取其属性(因为它将是'干净')
(也使用hasOwnProperty
排除继承的属性)
window.preexistingkeys = [];
var w = window.open();
for (var key in w) if(window.hasOwnProperty(key)) window.preexistingkeys.push(key);
w.close();
for (var key in window) {
if (window.hasOwnProperty(key) && window.preexistingkeys.indexOf(key)==-1) console.log(key, window[key]);
}