看起来检查
null
是有效的,但这是正确的方法吗?如何正确检查对象没有死?死对象的定义在哪里?
这可能是由于持有僵尸隔间。如果您将
window
存储在变量中,则应该使用弱引用,否则它会使进程保持活动状态。
在这里读得很好:
这是如何使用弱引用:
Components.utils.getWeakReference
死对象持有对 DOM 元素(通常)的强(保持活动)引用,即使在 DOM 中被销毁后,该引用仍然存在。
有时检查它是否未定义或为 null 不起作用,我曾经见过并且有时使用的一个技巧是检查 ParentNode 是否存在(因此不是 null 或未定义)。
如果你不能按照Blagoh的建议使用弱引用,那么你可以使用
Components.utils.isDeadWrapper()
函数来检查(在Firefox 17中添加,但尚未真正记录):
if (Components.utils.isDeadWrapper(element))
alert("I won't touch that, it's a dead object");
非特权代码实际上没有办法在不触发异常的情况下识别死亡对象。话又说回来,如果一个对象无论你做什么都抛出异常,那么它可能已经死了:
try
{
String(element);
}
catch (e)
{
alert("Better not touch that, it's likely a dead object");
}
死亡对象意味着其父文档已被销毁的对象,并且引用被删除以消除附加组件中的内存泄漏。所以你可以检查元素,如:
if( typeof some_element !== 'undefined') {
//its not dead
}
参见 死对象参考