Firefox addon XUL对话框没有';t按下后关闭";“关闭”;按钮

Firefox addon XUL对话框没有';t按下后关闭";“关闭”;按钮,firefox-addon,xul,Firefox Addon,Xul,我的插件中有一个对话框,当某个删除过程完成时会打开该对话框。我使用XUL对话框来显示所有此类消息,如下所示: 它有cancel按钮,ondialogcancel处理程序返回true。但按下按钮后不会立即关闭。我必须稍微拖动这个对话框,使它消失。此外,只有在重新安装插件后重新启动浏览器时,才会出现此问题。在我按下“取消”后,一个重新启动对话框立即关闭。我将此对话框用于其他一些消息,它们没有这样的问题 若我关闭窗口并使用Chromebug调试器再次打开它,而不是使用弹出窗口重新启动,我将无法重现

我的插件中有一个对话框,当某个删除过程完成时会打开该对话框。我使用XUL对话框来显示所有此类消息,如下所示:


它有cancel按钮,ondialogcancel处理程序返回true。但按下按钮后不会立即关闭。我必须稍微拖动这个对话框,使它消失。此外,只有在重新安装插件后重新启动浏览器时,才会出现此问题。在我按下“取消”后,一个重新启动对话框立即关闭。我将此对话框用于其他一些消息,它们没有这样的问题

若我关闭窗口并使用Chromebug调试器再次打开它,而不是使用弹出窗口重新启动,我将无法重现此错误。但如果我启动另一个FF版本,然后再次启动第一个版本(使用调试器),我会设法复制它。但当我在dialogcancel处理程序上使用逐步执行时,Chromebug的界面会变得无响应(脚本内容区域除外),并且在调试器中看到该窗口后对话框不会关闭。close()被执行,所以我必须再次拖动dialog窗口一点,使其消失。
我该怎么办?我终于找到了原因。问题确实是由dialogInit.js脚本引起的

window.addEventListener('load',函数(){myext.simpleDialogInitialize();},false);
addEventListener(“MozAfterPaint”,函数(){window.sizeToContent();},false);
addEventListener('unload',函数(){myext.simpleDialogFinalize();},false);

它甚至包含“加载”和“卸载”事件的处理程序。第一个调用在打开此窗口的方法中指定的初始值设定项。但“MozAfterPaint”事件还有一个名为window.sizeToContent的处理程序,所以我猜无限循环被触发了。扩展不是从头开始创建的,所以我有一段时间没有注意到这个错误。调用初始化器后,我将调整大小移动到“加载”事件处理程序,效果很好。

如果删除这些脚本会怎么样?这里的对话框应该可以正常工作(并且绝对不依赖于何时安装扩展),我怀疑问题出在其他地方-可能在
mainScript.js
dialogInit.js
中。问题是其他对话框使用没有任何问题(例如,new profile success初始值设定项对消息字符串有不同的参数,仅此而已)。在我再次重新启动浏览器后,此删除过程完成对话框工作正常(因此更新加载项后两次重新启动)。