Firefox addon 在Firefox扩展中使用XUL对话框

Firefox addon 在Firefox扩展中使用XUL对话框,firefox-addon,modal-dialog,xul,Firefox Addon,Modal Dialog,Xul,我需要在Firefox扩展启动后打开一个模式对话框,然后在特定条件下关闭它 我在XUL文件中使用id='myWindowName'定义了对话框,然后使用window.openDialog('XUL url','myWindowName',…)直接启动它,而不将它分配给任何变量 然后,我在后面的函数中定义y=document.getElementById('myWindowName'),并使用y.cancelDialog()关闭它 到目前为止,它看起来好像在工作,但我想问问这个方法是否正确 y=w

我需要在Firefox扩展启动后打开一个模式对话框,然后在特定条件下关闭它

我在XUL文件中使用
id='myWindowName'
定义了对话框,然后使用
window.openDialog('XUL url','myWindowName',…)
直接启动它,而不将它分配给任何变量

然后,我在后面的函数中定义
y=document.getElementById('myWindowName')
,并使用
y.cancelDialog()
关闭它

到目前为止,它看起来好像在工作,但我想问问这个方法是否正确

y=window.openDialog(“url”、“myWindowName”和…)
是否返回与
y=document.getElementByID(“myWindowName”)相同的引用

另外,为什么
window.cancelDialog()
不起作用呢?
window.close()
是自动关闭对话框的更好选项吗?

阅读

你似乎不知道Firefox(以及普通网页)中有不止一个“作用域”。我的意思是:每个窗口、选项卡和iframe都有自己的对象集(全局对象,即
窗口
对象、文档等)。此外,有时还有“作用域”有自己的全局对象,但没有DOM(无
窗口
文档
)-XPCOM组件、jsm模块、工作程序、沙盒

openDialog
返回新对话框的窗口对象。可以在该窗口的文档中访问
元素,语法取决于要访问它的脚本运行的位置:如果它在对话框中运行,则可以使用
文档.getElementById()
,而另一个窗口中的脚本必须通过对对话框窗口的引用来访问它(例如,
dialogWindow
):
dialogWindow.document.getElementById()

cancelDialog
是XUL
元素上的一个方法,而
close()
是一个窗口的方法,这就是为什么window.cancelDialog()不起作用,而window.close()起作用的原因


至于哪个对话框。
cancelDialog
window.close()
更好:cancelDialog比简单的window.close()做得更多(请参阅)--与按下对话框上的“取消”按钮时的步骤相同。因此,在关闭窗口之前,它会检查对话框的“取消”按钮是否已禁用,然后触发ondialogcancel事件,让感兴趣的代码阻止这种情况发生,如果一切正常,它会通过
window.close()关闭窗口

非常感谢您的详细解释和链接!