1

documentオブジェクト(およびwindow必要に応じてオブジェクト)の存在をチェックする(クロスブラウザー/プラットフォーム)ための最良かつ最も安全な(最短/最速ではない)ソリューションは何ですか?

(function(root, undefined) {

    var document = false;

    if(typeof root.document === "object" && root.document !== null)
        document = root.document;

    // ...

    if(document !== false)
        doMyFancyClientSideStuff();

})(this);

typeof window.documentブラウザには常にあり"object"ますか?window.document instanceof window.Documentまたは、受け取ったオブジェクトが実際にDOMタイプのオブジェクトであり、自作のオブジェクトなどではないことを確認するために必要な回避策のようなものはありますか。

4

1 に答える 1

1

「クロスブラウザ」の定義は、ここではかなり重要です。私は実際に次の[[Class]]ようなプロパティを確認することをお勧めします:

Object.prototype.toString.call( root.document );

それは[object HTMLDocument]現代のブラウザ(または[object Undefined])に戻るはずです。このリストにIE8+も含めるには、

if( "" + this.document === '[object HTMLDocument]' ) { }

これにより、次のリストが作成されます

  • IE8 +
  • クロム
  • Firefox
  • サファリ
  • Opera(わかりませんがそう思います)

IE<8は常に[[Class]][object]に戻ります。window.documentこれは少なくとも、私が考えることができる最も正確なチェックです。もちろん、次のようなものをチェックすることもできます

if( 'document' in this ) { }

ただし、これは、実際のDOMオブジェクトについて話していることを保証するものではなくdocument、グローバルオブジェクトに呼び出されるプロパティがあることを保証するものです。

于 2012-07-09T13:28:35.823 に答える