Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法从不同的作用域中删除事件侦听器_Javascript_Firefox_Event Listener - Fatal编程技术网

Javascript 无法从不同的作用域中删除事件侦听器

Javascript 无法从不同的作用域中删除事件侦听器,javascript,firefox,event-listener,Javascript,Firefox,Event Listener,我尝试为Firefox29+(Australis)制作一个附加组件。 我有一个菜单项,打开时在其上附加一个事件侦听器 每扇窗户的窗户。 我用标准的方式做,比如: var menuItem = document.getElementById("menuItemId"); if(menuItem) { menuItem.addEventListener("click", function onClick() { menuItem.removeEventListener("clic

我尝试为Firefox29+(Australis)制作一个附加组件。 我有一个菜单项,打开时在其上附加一个事件侦听器 每扇窗户的窗户。 我用标准的方式做,比如:

var menuItem = document.getElementById("menuItemId");
if(menuItem) {
   menuItem.addEventListener("click", function onClick() {
       menuItem.removeEventListener("click", onClick, false);
       // my code here;
   }, false);
};
它很好用。然而,我的问题如下:

在某些情况下,我希望在进入定制模式(“about:customization”)时删除侦听器,这是一个不同的范围。当然,为了在此模式下加载脚本,我还应用了“about:customization”uri中的overlay.xul

要从此模式中删除侦听器,我尝试了以下操作:

WindowMediator.getMostRecentWindow("navigator:browser")
.document.getElementById("menuItemId")
.removeEventListener("click", onClick, false);

- or -

Window.top

- or - 

window.parent 

etc
我对上述方法和其他类似的方法没有把握:-(


有什么想法吗?

如果您正试图这样做,那么上面示例中的
onClick
函数引用将无法在该函数之外访问。我想您需要将其设置为全局变量并从该窗口访问它。您好,谢谢您的回答。我将检查您的建议,尽管我相信这不是pr问题。你好,cookie monster,你是对的,onClick在该函数之外是不可访问的(我得到了未定义的错误)。我正确地修改了代码,但是,我的问题仍然存在。修改后,它在firefox主窗口中工作相同,但我无法从自定义模式(“关于:自定义”)中删除侦听器,没有此时间获取未定义的错误。可能这是因为侦听器是由主窗口添加的,而自定义模式具有不同的作用域。还有其他建议吗?抱歉,不确定可能是什么问题。可能在绑定处理程序的主窗口中尝试创建一个全局函数来删除侦听器,以便它正在使用原始窗口中的原始
removeEventListener
方法。然后从另一个窗口调用该函数。
WindowMediator.getMostRecentWindow(“导航器:浏览器”).removeMyHandler();