1

当用户单击主窗口的关闭按钮并要求他们确认时,我想捕捉我的 xulrunner 应用程序的关闭事件。如果他们不确认,我想取消此关闭事件并继续应用程序。

我尝试了 OnClose Event ,但我无法取消它。

我该如何实施?

4

3 回答 3

3

您可能想要两种不同的东西:

1) 窗口关闭时提示。您可以使用“关闭”事件,例如:

<!-- Creates an unclosable window -->
<window onclose="return false" ...>

我刚刚检查过它确实有效。

2) 应用程序即将退出时的提示。您可以通过 nsIObserverService(示例)观察退出应用程序请求的通知来做到这一点。

(1) 更接近您的要求,因为当用户按下窗口上的 [X] 按钮时,事件顺序是这样的:

  1. “关闭”事件被分派到窗口
  2. 如果没有阻止它,窗口就会关闭
  3. 如果没有留下任何窗口,并且不是 Mac OS X,则应用程序开始关闭,并发送 quit-application-requested。
  4. 如果没有观察者拒绝退出请求,则关闭继续。

另一方面,如果您仅将检查放在窗口的 onclose 处理程序中,则其他退出应用程序的方式(Win 上的 File-Exit/Mac 上的-Quit)可能会太晚触发它(例如,在关闭其他窗口之后)。此外,如果您的应用程序可以有多个“主”窗口(带有 onclose 逻辑),用户将不得不处理多个确认,这可能是您想要的,也可能不是。

以下是对 Firefox 代码的一些参考(如果我没有遗漏什么,它也应该与您的应用程序一起打包),您可以研究并重用所采用的方法:

于 2009-10-08T05:25:31.013 回答
1

对于其他人来说,你也可以这样做

把它放在主窗口中

onclose="if(CheckForClose() == false)return false"


create this javascript function somewhere

function CheckForClose()
   {
         var result = confirm('Do you want to close?');         

         return result;
   }
于 2011-03-08T20:04:44.420 回答
0

对于程序化且符合 DOM 级别 2 的问题,请回答 Nickolay 的评论 (1):

window.addEventListener(
  'close', function (event) {
    // do stuff...
    event.preventDefault();
  },
  true);
于 2011-08-15T19:36:23.383 回答