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

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

我使用一些构造函数参数创建了一个新选项卡,例如 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/

相关文章:

firefox - 对抗 Fuckip IP 匿名 FireFox 插件

javascript - 如何判断 XUL menupopup 打开还是打开?

html - 浏览器显示不同的 View chrome 与 firefox

objective-c - 听到keyUp事件了吗? : Overridden NSView method

javascript - jquery改变之前的内容

javascript - 如果元素存在,如何阻止 JavaScript 执行?

html - 隐藏滚动条,但仍然可以滚动

javascript - 如何从 Firefox 扩展发出 HTTP 请求

java - 如何使用java区分表单中的三个组合框?

perl - 使用 Mozrepl 使用 WWW::Mechanize::FireFox 创建缩略图 - 一些调试尝试