2015-12-20 3 views
1

Многие программы запрашивают пользователей, если они действительно хотят выйти после нажатия кнопки выхода из окна (большой красный X в верхнем правом углу окна). В приложениях HTML (HTA-файлы) мы можем это сделать.Отменить HTA закрыть после того, как пользователь нажимает кнопку закрытия

Однако, я не знаю, как отменить событие закрытия, которое происходит после onbeforeunload. Я попытался event.preventDefault(), event.stopPropagation(), event.cancelBubble = истина, window.event.bubbling = ложь, возвращают ложные, но ни работал.

Пример:

<head> 
<title>Cancel Close</title> 
</head> 

<script type="text/javascript"> 
    function ask() { 
     var answer = confirm("Quit program?"); 
     if (answer) { 
      alert("Exiting..."); 
     } else { 

      //window.event.preventDefault(); //method does not exist 
      //window.event.stopPropagation(); //method does not exist 

      window.event.cancelBubble = true; //quits anyway 
      window.event.bubbling = false; //quits anyway 
      return false; //quits anyway 
     } 
    } 
</script> 

<body bgcolor="#ECE9D8" style="overflow:auto" onbeforeunload="ask()"> 
    Some HTML... Click exit and cancel; the program exits anyway, but should not. 
</body> 

Как отменить операцию закрытия, если пользователь нажимает отменить?

+0

используйте более высокую версию IE с ребро мета. IE10 + позволяет использовать реальные события. вам также необходимо привязать _beforeunload_ к _window_, а не . вам также нужно вернуть строку в onbeforeunload, которую пользователь может видеть. – dandavis

+0

Если бы сложно было понять, что делать в соответствии с вашими комментариями, но, наконец, удалось это сделать. Новое окно, по умолчанию из IE, появляется, пытаясь подтвердить, действительно ли я хочу выйти, но опять же, независимо от того, отменяется или нет, он завершает работу. –

+0

вот что я боялся, извините. ну, по крайней мере, с лучшим IE у вас есть больше возможностей ... Одна последняя идея: в зависимости от вашего приложения вы можете сериализовать все состояние onunload, а затем перезапустить новое приложение со всеми теми же настройками из события onunload. убедитесь, что параметр «singleinstance' HTA» является ложным, если вы хотите это сделать. Таким образом, приложение все еще закрывается, но кажется, что он просто мигает. – dandavis

ответ

1

Я думаю, что это невозможно в .hta apllications. Вы можете попробовать альтернативное решение, чтобы скрыть кнопку закрытия и создать кнопку закрытия на странице. Вот ваш пример код отредактирован:

<head> 
<title>Cancel Close</title> 
<hta:application sysmenu="no"/> 
</head> 

<script type="text/javascript"> 
    function ask() { 
     var answer = confirm("Quit program?"); 
     if (answer) { 
      alert("Exiting..."); 
     } else { 

      //window.event.preventDefault(); //method does not exist 
      //window.event.stopPropagation(); //method does not exist 

      window.event.cancelBubble = true; //quits anyway 
      window.event.bubbling = false; //quits anyway 
      return false; //quits anyway 
     } 
    } 
</script> 

<body bgcolor="#ECE9D8" style="overflow:auto" onbeforeunload="ask()"> 
    Some HTML... Click exit and cancel; the program exits anyway, but should not. 
</body> 

Вы можете проверить ссылку https://msdn.microsoft.com/en-us/library/ms536495%28v=vs.85%29.aspx объекта приложения Есть очень конкретные вещи об этих .htы приложениях.

+0

Да, я знаю тег htа: application, это хорошая идея создать пользовательскую кнопку. Но я потеряю максимизацию и минимизацию кнопок, функциональность которых я не знаю, чтобы воссоздать. Любые подсказки? –

+0

Я нашел способ максимизировать и свернуть с помощью внутренних кнопок и javascript. Итак, этот ответ - это то, что я буду импигментировать. –

Смежные вопросы