2009-09-29 4 views
1

Я хочу, чтобы закрыть событие моего приложения xulrunner, когда пользователь нажимает кнопку закрытия главного окна и запрашивает подтверждение. Если они не подтвердят, я хочу отменить это закрытие и продолжить приложение.Как поймать xulrunners закрыть мероприятие и отменить его?

Я попробовал событие OnClose, но я не смог его отменить.

Как это реализовать?

ответ

3

Есть две разные вещи, которые вы можете:

1) побуждение, когда окно закрыто. Вы можете использовать событие «закрыть», например:

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

Я просто проверил его, и он действительно работает.

2) запрос, когда приложение собирается завершить работу. Вы можете сделать это, наблюдая уведомление quit-application-requested через службу nsIObserverService (example).

(1) ближе к тому, что вы спросили, так как, когда пользователь нажимает на кнопку [X] в окне, последовательность событий такова:

  1. «закрыть» событие отправляется в окно
  2. Если ничего не помешало, окно закрывает окно
  3. , если окон не осталось, и это не Mac OS X, приложение начинает закрываться, отправляется запрос на отправку заявки.
  4. Если ни один из наблюдателей не отклонил запрос на выход, завершение работы продолжается.

С другой стороны, если вы поставите чек только в OnClose обработчик окна, другие способы выхода из приложения (File-Exit на Win/-QUIT на Mac) может вызвать слишком поздно (например, после закрытие других окон). Кроме того, если ваше приложение может иметь более одного «основного» окна (с логикой onclose), пользователю придется иметь дело с несколькими подтверждениями, которые могут быть или не быть такими, какие вы хотите.

Вот некоторые ссылки на код Firefox (если я не хватает чего-то, она также должна быть упакована с приложением), вы можете исследовать и использовать подход, примененный:

+0

Спасибо Nickolay. Это была ошибка с моей стороны. Я сделал что-то вроде и вернул false из функции. Очевидно, это не сработало. – Ranjith

1

Для всех, кто хочет, вы также можете сделать это

поместить это в главном окне

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


create this javascript function somewhere 

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

     return result; 
    } 
+1

Почему не просто «onclose =» return CheckForClose() «'? –

0

для разработки программ, и уровень DOM 2-совместимый, ответ на замечание Nickolay (1):

window.addEventListener(
    'close', function (event) { 
    // do stuff... 
    event.preventDefault(); 
    }, 
    true);