标题几乎说明了一切。我需要检查一个对象是否是DOM:Window接口的实例。如果iframe存在,window
也将通过测试,window.frames[xyz]
也将通过。
最直观的方法似乎是通过object instanceof window.constructor
进行检查的简单实例。令人沮丧的是,有些浏览器(例如IE6),其window.constructor
等于undefined
。
您有什么建议?总是有像toString
这样的骇人,丑陋和/\[object.*window.*\]/i.test(object)
依赖的方法,但如果可能的话,我宁愿寻求一个简单,干净的解决方案。
window
对象具有不寻常的属性window
,该属性始终指向同一window
对象。 非常任何其他对象都不可能复制此行为,因此您可以将其用作window
测试的后备:
window.constructor
function isWindow(obj) {
if (typeof(window.constructor) !== 'undefined') {
return obj instanceof window.constructor;
} else {
return obj.window === obj;
}
}
您可以检查对象上是否存在DOM窗口界面所独有的合理良好支持的属性(例如jsFiddle showing this behaviour):
closed
您可以测试此方法function isWindow(obj)
{
return typeof obj.closed !== "undefined";
}
。