我正在使用SDK(版本1.16,Firefox版本31)编写和调试Firefox Addon。
我一直在使用ToggleButton小部件。我注意到,当我在[{1}}菜单中停用我的扩展程序时,我看到了几个类型错误:无法访问死对象'工具箱控制台中的消息。当我激活并打开标签时,会显示这些消息。
以下是演示此问题的示例中的简单代码:
about:addons
我是否需要在onUnload函数中以不同的方式执行某些操作(var ui = require("sdk/ui");
var button = ui.ToggleButton({
id: "my-button",
label: "my button",
icon: {
"16": "./icon-16.png",
"32": "./icon-32.png",
"64": "./icon-64.png"
},
onClick: handleClick
});
function handleClick(state) {
require("sdk/tabs").open("https://www.mozilla.org/");
}
exports.onUnload = function (reason) {
console.log("onUnload", reason);
button.destroy();
}
除外)?
答案 0 :(得分:2)
exports.onUnload
相当有问题,即存在许多错误以及很多无法正常工作的错误。尽可能避免(至少现在)。
幸运的是,您实际上并不需要在卸载时销毁该按钮:SDK会自动为您执行此操作。 .destroy()
实例方法适用于需要在卸载加载项之前销毁按钮的代码(例如,一旦用户登录就会被销毁的“登录”按钮)。
在您的特定示例中,ToggleButton
是错误的选择。这样的按钮适用于基本上是复选框的东西(有两种状态,例如打开和关闭)。
相反,ActionButton
可能更适合,看到点击实际执行某个操作(在新标签中打开某个网站)。
编辑:原来这是SDK中的一个错误,显然已经修复,因为它不存在。 然而,在当前的Firefox 31版本中它仍然存在,并且可以使用以下代码来触发:
var ui = require("sdk/ui");
var button = ui.ActionButton({
id: "my-button",
label: "my button",
icon: "./icon-16.png"
});
由于它是一个SDK错误,并且在运行您的插件时并没有真正影响您,您现在应该忽略它,在将来的Firefox版本中它不再是问题。< / p>
答案 1 :(得分:0)
它是一个SDK错误,与按钮或sdk/ui
模块无关,但更具体地说与event/dom
和event/chrome
无关,在某种程度上与{{1}相关模块这也是按钮间接需要的 - 但不仅如此,因此您可能会遇到使用不同模块的相同问题。
简而言之,SDK在这些模块中添加了一些监听器,但是一旦禁用了加载项,它就不会执行适当的清理。因此,当事件发出时,他们会尝试执行不再存在的代码。
在最新版本的Firefox中修复了这些错误,特别是在bug 1001833和bug 985332,但是这个错误,即使很烦人,也不会影响您的插件的功能,所以不要#39;担心。