我使用一些构造函数参数创建了一个新选项卡,例如 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);
但它不起作用。
如何删除此 onLoad
事件监听器?
最佳答案
这里的问题是您试图删除您从未添加的功能。你没有添加 onLoadFn
作为监听器,而是一个新的函数,基于 onLoadFn
,你绑定(bind)了 this
,更准确地说:
function foo() {};
console.log(foo === foo.bind(this)); // false
我不知道你为什么需要这样的东西,所以我真的不能推荐更优雅的方法,但如果你想删除监听器,你必须传递你添加的相同函数。因此,您必须将绑定(bind)结果的引用保存在某处,然后将其删除。作为替代方案,您也可以在调用 open
之前使用 tabs.once("load", listener)
,它会为您执行此操作——顾名思义,它将只执行一次监听器,即第一次发出事件时。
关于firefox - 如何删除传递给构造函数的 tabs.open 的 onLoad 事件监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32453549/