Javascript 带变量函数名的addEventListener语法

Javascript 带变量函数名的addEventListener语法,javascript,firefox-addon,addeventlistener,Javascript,Firefox Addon,Addeventlistener,在我的Firefox扩展中,我动态创建了一个弹出菜单。最初,我在每个菜单项上都使用了这一行: menuFunc.setAttribute(“oncommand”、“maintextension.MyPlugin.”+functionName+“();” 其中functionName是一个字符串,其中包含要为该菜单项调用的函数的名称。这很有效。当我将我的扩展上传到Mozilla插件页面时,自动代码验证程序标记了这一行,并表示使用setAttribute以这种方式设置oncommand是不安全的,应

在我的Firefox扩展中,我动态创建了一个弹出菜单。最初,我在每个菜单项上都使用了这一行:

menuFunc.setAttribute(“oncommand”、“maintextension.MyPlugin.”+functionName+“();”

其中
functionName
是一个字符串,其中包含要为该菜单项调用的函数的名称。这很有效。当我将我的扩展上传到Mozilla插件页面时,自动代码验证程序标记了这一行,并表示使用setAttribute以这种方式设置oncommand是不安全的,应该改用addEventListener。我切换到以下语法:

menuFunc.addEventListener(“oncommand”,function(){main extension.MyPlugin[functionName]},false)

但现在,当我点击菜单项时,什么也没发生


是我的语法不正确还是有其他问题?我认为问题不在于常见的“this”参考错误。我尝试从其中一个函数中删除“this”的所有用法,但仍然不起作用。似乎根本没有调用这些函数。也没有生成错误。

只是猜测:使用
true
而不是
false
作为第三个参数来捕获事件是否有帮助?

更新

命令
操作仅使用
命令
,而不是
命令

menuFunc.addEventListener("command", MainExtension.MyPlugin[functionName], false);

你应该能够做到:

menuFunc.oncommand = MainExtension.MyPlugin[functionName];

当使用addEventListener时,如果'oncommand'不是'command',我们通常会删除'on'前缀。嗯,这可能是代码的一个问题,但在我将“oncommand”更改为“command”后仍然没有发生任何事情。请参阅下面我对接受答案的评论!不,这似乎没有什么帮助:/这似乎也不起作用,这很奇怪,因为它似乎与
setAttribute
版本非常接近。你能检查一下该函数是否存在吗<代码>控制台.log(maintextension.MyPlugin[functionName]的类型)这给了我“函数”,所以看起来函数存在。是的,将“oncommand”切换到“command”就是答案。起初,这对我没有帮助,要么是因为我的函数中有一个“this”,要么是我的函数调用中有错误的语法。在我上面的问题中,我有
menuFunc.addEventListener(“oncommand”,function(){maintextension.MyPlugin[functionName]},false)。我应该有
menuFunc.addEventListener(“oncommand”,function(){maintextension.MyPlugin[functionName]();},false)。后一种语法(带括号和分号)和您的语法一样适用于我。