Javascript 扩展对话框:跨会话信息;“预加载”;事件和如何居中启动对话框?

Javascript 扩展对话框:跨会话信息;“预加载”;事件和如何居中启动对话框?,javascript,firefox,firefox-addon,Javascript,Firefox,Firefox Addon,我正在为个人消费和实践进行一个小型扩展。我想做的是在Firefox每次开始使用模式对话框时提供一些信息。我知道这通常是不赞成的,但这主要是为了诀窍。关于一些事情,我有几个问题——我觉得有更好的方法来做。请分享您的智慧: 我已经创建了一个小对话框XUL,并且在主窗口的加载事件中注册了一个事件侦听器。要实际显示对话框,我使用: window.openDialog(“chrome://myext/content/prompt.xul“,”对话框名称“, “chrome,dialog,modal,cen

我正在为个人消费和实践进行一个小型扩展。我想做的是在Firefox每次开始使用模式对话框时提供一些信息。我知道这通常是不赞成的,但这主要是为了诀窍。关于一些事情,我有几个问题——我觉得有更好的方法来做。请分享您的智慧:

  • 我已经创建了一个小对话框XUL,并且在主窗口的加载事件中注册了一个事件侦听器。要实际显示对话框,我使用:

    window.openDialog(“chrome://myext/content/prompt.xul“,”对话框名称“,
    “chrome,dialog,modal,centerscreen,可调整大小”,params.focus();
    
  • 问题1:我无法将启动对话框放在中央屏幕上(即使启用了
    中央屏幕
    ),它也会从左上角开始,最好放在中间,就像Firefox在启动请求时的密码一样。我怎样才能做到这一点

  • 我希望每个会话只打开一次模式窗口,即使有多个Firefox实例。我所做的是,一旦对话框运行,我设置了一个扩展首选项,并在打开任何新窗口的“加载”事件的另一个对话框之前进行检查
  • 问题2:为了确保我没有从上一个会话中设置首选项,我尝试检查这是否是第一个打开的窗口,如果是,我会重置首选项。为了安全起见,我还在最后一个关闭窗口的卸载事件中重置了它们。为了发现第一次/最后一次加载和卸载,我使用
    nsIWindowWatcher
    服务,看看是否可以遍历返回的枚举数:

    var ww=Components.class[“@mozilla.org/embedcomp/windowwatcher;1”]
    .getService(组件.接口.nsIWindowWatcher);
    var en=ww.getWindowEnumerator();
    var win1=en.getNext();
    //如果没有更多的en.getNext(),则这是第一个窗口
    
    必须有更好的方法来做到这一点,不是吗?例如,某些事件在每个会话(而不是每个窗口)中只触发一次

  • 如果对话框被取消,我希望Firefox关闭。现在,我通过与对话框的cancel按钮关联的一个简单的
    窗口.close()
    来实现这一点。但是,由于原始加载(触发模式对话框)是在页面完成加载后调用的,因此我可以在主页关闭之前看到它的一小部分,原因是
    window.close()
    ——这并不优雅。是否有类似于“页面加载前”的事件?实现这一目标的正确途径是什么

  • 同样,这主要是供个人使用,因此请忽略启动模式对话框的可用性因素。

    您可能需要观察主窗口打开之前发生的
    最终ui启动
    通知。您可以注册一个组件来观察更改后的
    配置文件
    通知,然后在该通知期间,添加您自己来观察
    最终ui启动
    通知。当您的组件随后收到该通知时,它可以打开您的模式对话框,然后在必要时退出应用程序