4

シナリオ: 複雑な API を使用する既存の HTML/JavaScript サイトを見つけようとしています。オブジェクトにいくつかのプロパティを追加しwindowます。ビルトインまたはデフォルトではないプロパティのみを列挙したい (例: exclude window.locationwindow.parentなど)。

これを行うための慣用的な JavaScript の方法はありますか? 空白の HTML ページで浅いコピーを作成し、実際のプロパティを列挙するときに何らかの方法でこれらのプロパティを「差し引く」ことを考えていました。

理想的には、通常のプロパティが存在しないかのようにオブジェクトをコンソールまたはウォッチにダンプする方法が必要で、windowJavaScript ソースで追加されたもののみが必要です。

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 に答える