繁体   English   中英

如何避免在我的Firefox插件中出现“TypeError:无法访问死对象”的状态?

[英]How can I avoid state of “TypeError: can't access dead object” in my Firefox add-on?

它似乎检查null工作,但它是一个正确的方法? 如何正确检查对象是否已死? 死对象的定义在哪里?

这可能是由于持有僵尸隔间。 如果要在变量中存储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或未定义)。

如果您不能使用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
}

请参阅死对象参考

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM