如何删除传递给构造函数tabs.open的onLoad事件侦听器?

时间:2015-09-08 09:03:48

标签: firefox event-handling firefox-addon firefox-addon-sdk

我创建了一个包含一些构造函数参数的新选项卡,例如$('div').each(function(){ var valueOfDiv; if($(this).find('span').length > 0) { valueOfDiv = $(this).find('span').text(); } else{ valueOfDiv = $(this).html(); }); event:

onLoad

我想在执行后删除事件监听器。我试过了:

tabs.open({
    url: url,
    onLoad: function onLoadFn(tab) {
        console.log("Tabs.open; onLoadFn()");
        setTimeout(function() {
            handler(this.findWorker(tab));
            tab.removeListener("load", onLoadFn);
        }.bind(this), 500);
    }.bind(this)
});

但它不起作用。

如何删除此tab.removeListener("load", onLoadFn); tabs.removeListener("load", onLoadFn); 事件侦听器?

1 个答案:

答案 0 :(得分:3)

这里的问题是您正在尝试删除您从未添加的功能。您没有添加onLoadFn作为监听器,而是基于onLoadFn的新功能,您绑定this,更确切地说:

function foo() {};

console.log(foo === foo.bind(this)); // false

我不知道你为什么需要这样的东西,所以我不能真正建议一种更优雅的方式,但是如果你想要移除听众,你必须传递相同的功能#&# 39;重新加入。所以你必须在某处保存绑定结果的引用,并删除它。作为替代方案,您也可以在调用tabs.once("load", listener)之前使用open,这将为您执行此操作 - 顾名思义,它将在第一次发出事件时执行一次侦听器。 / p>