2016-08-16 1 views
1

J'ai besoin de votre aide,En attente de fonction pour terminer avant de fermer la fenêtre à l'aide window.onbeforeunload

Il semble que quand je ferme la fenêtre (IE 11), la boîte de confirmation apparaît et que je clique sur le bouton OK , la fonction veut s'exécuter, mais la fenêtre se ferme avant que la fonction ait une chance de terminer (enregistrer un enregistrement dans une base de données). Comment le code peut-il être modifié de telle sorte qu'il donne à la fonction imts_save_changes() une chance de finir ses opérations de DB avant de fermer la fenêtre?

Voici le balisage:

<!DOCTYPE html> 

<html> 

<head> 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

<style type="text/css"> 

</style> 

<script type="text/javascript"> 

window.onbeforeunload = function() { return test() } 

function test() { 

    if (confirm("would you like to run the last function before closing the window?")) { 

     imts_save_changes() 

     alert("record saved") 

    } 
} 

</script> 

</head> 

<body></body> 

</html> 

Le code en question:

window.onbeforeunload = function() { return test() } 

function test() { 

    if (confirm("would you like to run the last function before closing the window?")) { 

     imts_save_changes() 

     alert("record saved") 

    } 
} 
+0

Vous devez simplement annuler la navigation et utiliser la fonction onbeforeunload avec leur message normal. – epascarello

+0

Javascript n'est pas possible d'empêcher la fermeture de la fenêtre. C'est une fonctionnalité de sécurité, un logiciel malveillant utilisé pour garder la fenêtre ouverte jusqu'à ce que l'utilisateur l'autorise à faire ses dégâts. – Barmar

+0

@barmar HTAs ne se soucient pas beaucoup de la sécurité ... – Teemu

Répondre

2

Lorsque vous confirm fermer la fenêtre tirée par onbeforeunload événement, il est fermé immédiatement; vous ne pouvez pas annuler l'action suivante (fermeture réelle). Tout ce que vous pouvez faire est d'avertir l'utilisateur, dans ce cas, des changements non enregistrés et de lui donner la chance de ne pas confirmer l'action.

Je ne suis pas sûr à 100%, mais je pense que la fonction alert et confirm gèle DOM afin que rien ne puisse se produire avant l'interaction de l'utilisateur.

IMO, vous devriez changer la conception de votre application.