2012-07-09 44 views
1

(跨瀏覽器/平臺)檢查存在document對象(如果需要,可能是window對象)的最佳和最安全(不是最短/最快)解決方案是什麼?與平臺無關的JavaScript:檢查是否存在DOM

(function(root, undefined) { 

    var document = false; 

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

    // ... 

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

})(this); 

是在瀏覽器總是"object"typeof window.document?或者是否有可能需要解決方法來確保我們收到的對象真的是DOM類型的對象,如window.document instanceof window.Document,而不僅僅是一個自制對象或其他東西。

+0

您可以詳細說明您需要做什麼而不是您已經想過如何解決它?如果您在無頭瀏覽器或IDE中運行,我個人只能看到一個問題 – mplungjan 2012-07-09 12:54:21

回答

1

您的「跨瀏覽器」的定義在這裏是非常重要的。其實我建議來檢查[[Class]]屬性,如:

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

這應該返回modern'ish瀏覽器[object HTMLDocument](或[object Undefined])。也包括IE8 +此列表中,我們需要調用

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

這將創建

  • IE8的列表+
  • 火狐
  • Safari瀏覽器
  • 歌劇院(我不知道,但是這麼認爲)

IE < 8將始終在window.document [[Class]]上返回[object]。這至少是我能想到的最準確的檢查。當然,你可以,也只是檢查像

if('document' in this) { } 

但這並不能保證我們談論的是實際工作中的DOM對象,只是有一個名爲全球對象document屬性。

+0

謝謝! '「」+ this.document'就是我正在尋找的東西。我正在做一個跨瀏覽器測試的更多研究,因爲在 headacheCoder 2012-07-09 13:43:15