ユーザーがメイン ウィンドウの [閉じる] ボタンをクリックして確認を求めたときに、xulrunner アプリの閉じるイベントをキャッチしたいと考えています。確認しない場合は、この閉じるイベントをキャンセルしてアプリケーションを続行したいと考えています。
OnClose Event を試してみましたが、キャンセルできませんでした。
これを実装するにはどうすればよいですか?
ユーザーがメイン ウィンドウの [閉じる] ボタンをクリックして確認を求めたときに、xulrunner アプリの閉じるイベントをキャッチしたいと考えています。確認しない場合は、この閉じるイベントをキャンセルしてアプリケーションを続行したいと考えています。
OnClose Event を試してみましたが、キャンセルできませんでした。
これを実装するにはどうすればよいですか?
あなたが望むかもしれない2つの異なるものがあります:
1)ウィンドウが閉じられたときにプロンプトを表示します。「close」イベントを使用できます。例:
<!-- Creates an unclosable window -->
<window onclose="return false" ...>
確認したところ、動作します。
2)アプリケーションが終了しようとしているときにプロンプトを表示します。これを行うには、nsIObserverServiceを介してquit-application-requested通知を監視します(例)。
(1)ユーザーがウィンドウの[X]ボタンを押すと、イベントのシーケンスは次のようになるため、質問に近いものになります。
一方、ウィンドウのoncloseハンドラーのみにチェックを入れると、アプリケーションを終了する他の方法(Winの場合はFile-Exit / Macの場合はQuit)でトリガーが遅すぎる可能性があります(他のウィンドウを閉じた後など)。また、アプリに複数の「メイン」ウィンドウ(oncloseロジックを使用)を含めることができる場合、ユーザーは複数の確認を処理する必要があります。これは、希望するものである場合とそうでない場合があります。
Firefoxコードへの参照をいくつか示します(何かが足りない場合は、アプリケーションにパッケージ化する必要があります)。採用したアプローチを調査して再利用できます。
探している他の人のために、これを行うこともできます
これをメインウィンドウに配置します
onclose="if(CheckForClose() == false)return false"
create this javascript function somewhere
function CheckForClose()
{
var result = confirm('Do you want to close?');
return result;
}
プログラマティックでDOMレベル2に準拠している場合は、Nickolayの発言(1)に答えてください。
window.addEventListener(
'close', function (event) {
// do stuff...
event.preventDefault();
},
true);