我创建了一个带有一些构造函数参数的新选项卡,如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
事件监听器?
这里的问题是,你试图删除一个功能,你从来没有添加。你没有添加onLoadFn
作为监听器,但一个新的功能,基于onLoadFn
,你绑定this
,更准确地说:
function foo() {};
console.log(foo === foo.bind(this)); // false
我不知道你为什么需要这样的东西,所以我真的不能建议一个更优雅的方法,但是如果你想删除侦听器,你必须传递你添加的相同的函数。所以你必须把绑定结果的引用保存在某个地方,然后删除它。作为替代方案,您也可以在调用open
之前使用tabs.once("load", listener)
,这将为您完成此操作—顾名思义,它将在事件第一次发出时仅执行一次侦听器。