2012-04-29 4 views
5

私はすなわちウィンドウオブジェクトのすべてのプロパティをリストしますか?

console.log('HTMLPreElement' in window); //=> true 

だから私は、私はだろうと思った、これらのオブジェクトはグローバルであるなどHTMLSpanElement、などHTMLPreElementとして、ブラウザが現在認識しているHTML要素のリストを取得する(動的)に探しています(MDNは、これは列挙および非列挙特性の両方を返すことを述べて)グローバルプロパティの完全なリストを取得するために

console.log(Object.getOwnPropertyNames(window)); 

:このようなgetOwnPropertyNamesを使用することができます。

上記を使用して、約70のプロパティー・ナノを持つ配列を取得します。しかし、HTMLPreElement - HTMLElementなどのオブジェクトは含まれません。私も試してみました:

が、再び、全く HTMLPreElementaddEventListenerなどを含まない)大きなリストを戻します
console.log(Object.getOwnPropertyNames(window.Window.prototype)); 

だから、どこでこれらのHTML{Tag}Elementオブジェクトが存在するのですか?

+0

http://jsfiddle.net/mBAHm/

が、これは(のために... 'だけのシンプルなin')のWebKitでの作業を行うように見えますが、Firefoxはそれらを一覧表示することを拒否します。 – Graham

+1

それはあなたがFirefoxでそれを見ることができない理由を知っているのは興味深いですが、それは...あなたが気にしない理由を知ることはあまりない面白いですか? – gdoron

+0

@gdoron - 最初は有効なタグの一覧が必要でしたが、表示できないときには、なぜ表示されないのか、もっと興味がありました。でも、私のために 'HTMLElement'が含まれていません – Graham

答えて

3

、明示的にグローバル変数やプロパティとして要求されない限り、彼らのグローバルオブジェクトが追加されていないことの要素の振る舞いのようです。おそらくFirefoxは、それらが実際に必要でない限り、メモリを消費しないように、それらを環境に読み込みます。

前述したように、彼らが最初に明示的に参照されてきたない限り、単にObject.getOwnPropertyNamesを介したグローバルオブジェクトのキーを要求するとき、彼らは現れないようです。

+0

今、私は私の間違った答えを削除することができます... :) – gdoron

+0

@gdoron:私はいくつかの時点で、あなたの答えに、すべてその情報を追加するつもりだったことを期待していました! ;)あなたの答えは正しいと判明しましたが、Firefoxはただのことを難しくしていました。 :) –

4

これは必要なのですか? Firefoxので

+0

... – Ryan

1
var obj = window; 
while(obj){ 
    for(let prop of Reflect.ownKeys(obj)){ 
     console.log(prop); 
    }; 
    obj = Object.getPrototypeOf(obj); 
}; 
関連する問題