2012-07-09 45 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