Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firefox 如何删除传递给构造函数的onLoad事件侦听器';打开了吗?_Firefox_Event Handling_Firefox Addon_Firefox Addon Sdk - Fatal编程技术网

Firefox 如何删除传递给构造函数的onLoad事件侦听器';打开了吗?

Firefox 如何删除传递给构造函数的onLoad事件侦听器';打开了吗?,firefox,event-handling,firefox-addon,firefox-addon-sdk,Firefox,Event Handling,Firefox Addon,Firefox Addon Sdk,我使用一些构造函数参数创建了一个新选项卡,例如onLoadevent: tabs.open({ url: url, onLoad: function onLoadFn(tab) { console.log("Tabs.open; onLoadFn()"); setTimeout(function() { handler(this.findWorker(tab)); tab.removeListener

我使用一些构造函数参数创建了一个新选项卡,例如
onLoad
event:

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);
但它不起作用


如何删除此
onLoad
事件侦听器?

这里的问题是您试图删除一个从未添加的函数。您没有将
onload fn
添加为侦听器,而是基于
onload fn
添加了一个新函数,您在其中绑定了
,更准确地说:

function foo() {};

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

我不知道你为什么需要这样的东西,所以我真的不能建议一个更优雅的方法来这样做,但如果你想删除侦听器,你必须传递你正在添加的相同函数。因此,您必须将绑定结果的引用保存在某个位置,然后将其删除。作为替代方案,您也可以使用
选项卡。在调用
打开
之前,使用一次(“加载”,侦听器)
,这将为您做到这一点–顾名思义,它只会在事件第一次发出时执行侦听器一次。

我通过在打开新选项卡之前保存对此的引用(
var self=this
)解决了这个问题。谢谢