web-dev-qa-db-fra.com

comment empêcher les utilisateurs de fermer une fenêtre en javascript?

Est-il possible d'empêcher les utilisateurs de fermer la fenêtre en utilisant le bouton de sortie [X]? Je fournis en fait un bouton de fermeture dans la page pour que les utilisateurs ferment la fenêtre. En gros, ce que j'essaie de faire est de forcer les utilisateurs à remplir le formulaire et à le soumettre. .

les gars j'apprécie vraiment vos commentaires, je ne pense pas à héberger sur un site Web commercial. c'est une chose interne, nous obtenons en fait tout le personnel pour participer à cette enquête que nous avons conçue .... se demandait s'il y avait une solution au problème que nous avons ici ...

43
manraj82

Jetez un œil à onBeforeUnload .

Cela n'obligera pas quelqu'un à rester mais cela les incitera à leur demander s'ils veulent vraiment partir, ce qui est probablement la meilleure solution multi-navigateur que vous pouvez gérer. (Similaire à ce site si vous essayez de laisser la mi-réponse.)

<script language="JavaScript">
    window.onbeforeunload = confirmExit;
    function confirmExit() {
        return "You have attempted to leave this page. Are you sure?";
    }
</script>

Modifier: la plupart des navigateurs n'autorisent plus un message personnalisé pour onbeforeunload.

Voir ceci rapport de bogue du 18 février 2016.

les boîtes de dialogue onbeforeunload sont utilisées pour deux choses sur le Web moderne:
1. Empêcher les utilisateurs de perdre des données par inadvertance.
2. Arnaquer les utilisateurs.

Dans une tentative de restreindre leur utilisation pour ces derniers sans arrêter les premiers, nous n'allons pas afficher la chaîne fournie par la page Web. Au lieu de cela, nous allons utiliser une chaîne générique.

Firefox fait déjà cela [...]

90
Pool

Que ferez-vous lorsqu'un utilisateur frappe ALT + F4 ou le ferme à partir du Gestionnaire des tâches

Pourquoi ne gardez-vous pas la trace s'ils ne l'ont pas rempli dans un cookie ou la base de données et lors de leur prochaine visite, ramenez simplement le même écran ...: BTW..vous n'avez pas fini de remplir ce formulaire ... "

Bien sûr, si vous étiez autour avant le buste dotcom, vous vous souviendriez des tempêtes pornographiques, où si vous fermiez 1 fenêtre, 15 autres s'ouvriraient. l'enfant et le parent (si c'était une popup)

8
SQLMenace

Si vous ne voulez pas afficher de popup pour tous les événements, vous pouvez ajouter des conditions comme

window.onbeforeunload = confirmExit;
    function confirmExit() {
        if (isAnyTaskInProgress) {
           return "Some task is in progress. Are you sure, you want to close?";
        }
    }

Cela fonctionne bien pour moi

7
Imam

Cela ouvrira une boîte de dialogue demandant à l'utilisateur s'il veut vraiment fermer ou rester, avec un message.

var message = "You have not filled out the form.";
window.onbeforeunload = function(event) {
    var e = e || window.event;
    if (e) {
        e.returnValue = message;
    }
    return message;
};

Vous pouvez ensuite le désactiver avant de soumettre le formulaire ou autre chose avec

window.onbeforeunload = null;

Gardez à l'esprit que c'est extrêmement ennuyeux. Si vous essayez de forcer vos utilisateurs à remplir un formulaire qu'ils ne veulent pas remplir , alors vous échouerez: ils trouveront un façon de fermer la fenêtre et de ne jamais revenir à votre site Web moyen.

2
Gipsy King

Si vous envoyez un sondage interne qui nécessite une participation de 100% des employés de votre entreprise, alors un meilleur itinéraire serait de simplement avoir le formulaire pour garder la trace de l'ID/nom d'utilisateur/email des répondants, etc. rappel par e-mail aux membres de votre organisation pour répondre à l'enquête ... vous pourriez même automatiser cela.

2
John Lechowicz

C'est une mauvaise pratique de forcer l'utilisateur à faire quelque chose qu'il ne veut pas nécessairement faire. Vous ne pouvez jamais vraiment les empêcher de fermer le navigateur.

Vous pouvez obtenir un effet similaire, cependant, en créant un div sur votre page Web actuelle pour superposer le reste de vos contrôles afin que votre formulaire soit la seule chose accessible.

2
Jonathon Faust

Et ça?

function internalHandler(e) {
    return "Please don't leave our page ever!";
}

if (window.addEventListener) {
    window.addEventListener('beforeunload', internalHandler, true);
} else if (window.attachEvent) {
    window.attachEvent('onbeforeunload', internalHandler);
}
1
alun

Eh bien, vous pouvez utiliser le window.onclose événement et retourne false dans le gestionnaire d'événements.

function closedWin() {
    confirm("close ?");
    return false; /* which will not allow to close the window */
}
if(window.addEventListener) {
     window.addEventListener("close", closedWin, false);
}

window.onclose = closedWin;

Le code provient de ce site .

En revanche, s'ils forcent la fermeture (en utilisant le gestionnaire de tâches ou quelque chose dans ces lignes), vous ne pouvez rien y faire.

0
jpabluz