似乎检查null
是否有效,但这是一种正确的方法吗?如何正确检查对象是否已死?死对象的定义在哪里?
答案 0 :(得分:3)
这可能是由于持有僵尸隔间。如果要在变量中存储window
,则应使用弱引用,否则会使进程保持活动状态。
很好的阅读:
https://developer.mozilla.org/en-US/docs/Zombie_compartments
这是如何使用弱引用: https://developer.mozilla.org/en-US/docs/Components.utils.getWeakReference
一个死对象,持有对DOM元素(通常)的强大(保持活动)引用,即使在DOM中被销毁之后它仍然存在。
有时检查它是否未定义或null不起作用,我看过一次并且有时使用的技巧是检查parentNode是否存在(所以不是null或未定义)。
答案 1 :(得分:1)
如果您不能使用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");
}
答案 2 :(得分:0)
死对象意味着一个对象,其父文档已被销毁,并且删除了引用以消除加载项中的内存泄漏。所以你可以检查元素,如:
if( typeof some_element !== 'undefined') {
//its not dead
}