PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV 2024 → beforeunload
beforeunload
Débuté par Arriety, 12 mar. 2021 16:13 - 3 réponses
Posté le 12 mars 2021 - 16:13
Bonjour à tous,

je viens vers vous car je bloque sur un problème qui semble bien simple.
Objectif : faire en sorte que le navigateur affiche un message à l'utilisateur quand celui-ci quitte le site en fermant le navigateur. En somme ça lui dit que ses données non sauvegardées vont être perdues.

ça se fait assez facilement avec le bout de code suivant, que je place dans l'initialisation de ma page :
MaPage..HTMLFinPage += [
<script>
window.onbeforeunload = function(e) {
return 'Vous allez perdre vos modifications.';
};
</script>
]

Problème : Le message s'affiche également quand on navigue d'une page à l'autre du même site. Comportement normal, mais dans mon cas je souhaite afficher ce message que sur la fermeture du navigateur.


En complétant mon code comme ceci cela devrait marcher :
<script>
window.onbeforeunload = function(e) {
return 'Vous allez perdre vos modifications.';
};

var myForm = document.getElementsByTagName("form");
myForm[0].addEventListener('submit', plusDeMessage);
function plusDeMessage()
{
window.onbeforeunload = null;
};
</script>

Mais il n'en est rien :/.
Quelqu'un aurait-il une idée ?
Merci
Membre enregistré
33 messages
Posté le 17 janvier 2022 - 19:37
Bonjour,

J'ai aussi essayé ce type de procédure, qui est d'ailleurs utilisée dans l'exemple "HONOLULU", mais cela ne fonctionne pas.

D'ailleurs dans le site HONOLULU, il y a un code dans l'évènement "Fermeture du projet" qui est exécuté lorsque l'on ferme le navigateur.
Alors que dans mon projet, le code de fermeture du projet est lancé et arrêté presque instantanément après, donc le code ne s'exécute pas.

Des idées ?
Avez-vous réussi à trouver une solution ?

Merci.
Posté le 18 janvier 2022 - 09:39
Bonjour, rien de plus concernant ce sujet pour moi.
Concernant votre event "fermeture de projet", celui-ci ne se déclenche que sur le timeout de session.
Si vous avez paramétré vos sessions avec une durée de vie de 10 minutes il faudra donc attendre au max 10 minutes pour rentrer dedans
Membre enregistré
324 messages
Popularité : +21 (51 votes)
Posté le 19 janvier 2022 - 10:34
Bonjour,

Il vous faut gérer dynamiquement l'ajout de la fonction dans la source html de la page via de l'ajax.

Imaginons une case à cocher qui permet ou non l'affichage du message, cocher ca mets l'alerte, non cocher ca ne l'affiche pas

Dans le code l'interrupteur au retour de AJAX, en mode JS on peut mettre ce code

window.onbeforeunload = this.checked ? function(){return "Are you sure ?"} : undefined;


En gros le principe est d'aller modifier en temps réel et au besoin le contenu du window.onbeforeunload
soit avec une fonction function(){return "Are you sure ?"} soit avec "undefined"

Donc à vous de gérer les cas où la fonction doit être active et les moments ou elle passe en undefined.

Y'a plein de façon de faire, c'en est une parmi tant d'autre, je connais pas grand chose en javascript, peut-être certains trouverons ma solution idiote, mais ça fonctionne ^^