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