javascript - 对象在 panel.port.on 上返回两次

标签 javascript firefox firefox-addon-sdk

我遇到过这样的问题,即来自 contentScriptFile 的数据在每个调用函数上以渐进方式返回,例如第一次调用它只返回 1 个实例,第二次调用它返回 2 个实例,第三次调用它返回 3 个实例。

主要.js:

var panel = panels.Panel({
    width: 270,
    height: 255,
    contentURL: self.data.url("panel.html"),
    contentScriptFile: self.data.url("panelScript.js"),
});

function handleClick(state) {
    panel.show({
        position: button
    });
}

panel.on("show", function() {
    panel.port.emit("pane");
});

panel.port.on("check", function(options) {
    panel.hide();
    console.log(options);
});

面板脚本.js:

self.port.on("pane", function onShow() {
    selectChoosen.addEventListener("click", function onClick(event) {
        self.port.emit("check", options());
    }, false);

});

function options() {
    return selectedOptions;
};

你能帮我弄清楚如何修复它吗?

最佳答案

这是因为您在每次调用 onShow 处理程序时都添加了点击处理程序。我想你想做的是:

selectChoosen.addEventListener("click", onClick, false);

function onClick(event) {
  self.port.emit("check", options());
}

function options() {
    return selectedOptions;
};

...这样您只需添加一次点击事件监听器。

关于javascript - 对象在 panel.port.on 上返回两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24617757/

相关文章:

javascript - 防止提交时意外关闭浏览器窗口

java - 控制 Firefox 部分的客户端 jar

javascript - 获取当前网址

javascript - 单击时有反应的 Firefox 插件(左)

c# - 正则表达式验证器中的验证表达式

javascript - 将 Canvas 数据发送到服务器

javascript - 当内存中有多个同名函数时调用特定的javascript函数

firefox - 将焦点设置在 IE 和/或 FireFox 中的特定选项卡上

javascript - 具有循环功能的 <video> 元素不会在 Chrome 或 Firefox 中无缝循环播放视频

javascript - 从 firefox 扩展的数据目录播放音频