4

场景:我正在尝试使用复杂的 API 找出现有的 HTML/JavaScript 站点。它为对象添加了几个属性window。我只想列举那些不是内置或默认值的属性(例如 exclude window.locationwindow.parent等)

有没有一种惯用的 JavaScript 方法来做到这一点?我曾想过在空白的 HTML 页面中做一个浅拷贝,然后在枚举真实页面时以某种方式“减去”这些属性。

理想情况下,我想要一种将对象转储到控制台或手表中的方法,就好像不window存在任何常规属性一样,只有那些使用 JavaScript 源添加的属性。

4

2 回答 2

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]);
}
​

用小提琴

请注意,您可以在导入外部脚本之前在页面标题的开头执行第一部分。这是一个示例

于 2012-09-25T17:50:10.563 回答
2

扩展dystroy的答案,如果您无法在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]);
}
于 2012-09-25T18:07:04.843 回答