1

ユーザーがメイン ウィンドウの [閉じる] ボタンをクリックして確認を求めたときに、xulrunner アプリの閉じるイベントをキャッチしたいと考えています。確認しない場合は、この閉じるイベントをキャンセルしてアプリケーションを続行したいと考えています。

OnClose Event を試してみましたが、キャンセルできませんでした。

これを実装するにはどうすればよいですか?

4

3 に答える 3

3

あなたが望むかもしれない2つの異なるものがあります:

1)ウィンドウが閉じられたときにプロンプ​​トを表示します。「close」イベントを使用できます。例:

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

確認したところ、動作します。

2)アプリケーションが終了しようとしているときにプロンプ​​トを表示します。これを行うには、nsIObserverServiceを介してquit-application-requested通知を監視します()。

(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 に答える