标题几乎说明了一切。我需要检查一个对象是否是DOM的一个实例:Window接口。如果iframe存在,window
也将通过测试,window.frames[xyz]
。
最直观的方式似乎是通过object instanceof window.constructor
检查的简单实例。浏览器(如IE6),其window.constructor
等于undefined
,这是一种令人遗憾的事态。
你会建议什么?总是存在hacky,丑陋和toString
依赖的方式,如/\[object.*window.*\]/i.test(object)
,但如果可能的话,我宁愿选择一个简单,干净的解决方案。
答案 0 :(得分:5)
window
对象具有异常属性window
,它始终指向相同的window
对象。任何其他对象都不可能非常复制此行为,因此您可以将其用作window.constructor
测试的后备:
function isWindow(obj) {
if (typeof(window.constructor) === 'undefined') {
return obj instanceof window.constructor;
} else {
return obj.window === obj;
}
}
答案 1 :(得分:2)
您可以检查对象上是否存在DOM窗口界面特有的合理支持的属性(例如closed
):
function isWindow(obj)
{
return typeof obj.closed !== "undefined";
}
您可以测试此方法here。