De nombreuses pages contiennent des alertes lorsque vous les quittez: si vous fermez des onglets, que vous vous éloignez sans enregistrer, etc., il existe de nombreuses raisons pour lesquelles un site vous alertera / vous empêchera de quitter jusqu'à ce que vous confirmiez une alerte, par exemple "Êtes-vous sûr de vouloir quitter cette page? ".
Cela se fait généralement avec les gestionnaires onbeforeunload
et / ou onunload
.
Voici un exemple.
Existe-t-il un moyen de prévenir les alertes / événements de blocage d'utilisateurs générés par ces gestionnaires? Fondamentalement, je voudrais laisser JS activé, et en particulier interdire les choses qui m'empêcheraient de quitter une page sans qu'un clic supplémentaire ne se produise.
onbeforeunload
et les onunload
gestionnaires devraient toujours tirer; ils ne devraient tout simplement pas être autorisés à faire des choses qui bloquent l'utilisateur. Cela signifie aucune alerte et aucune opération qui prend plus de quelques secondes.
J'ai trouvé quelques plugins qui modifient / greasemonkey corrigent le javascript pour des pages particulières, et j'ai joué un peu avec leur code pour essayer de les rendre plus universellement applicables. Cependant, j'espère trouver une solution qui fonctionne sur n'importe quelle page qui tente de bloquer l'exit utilisateur.
la source
onbeforeunload
) ne fonctionnera que pour les pages qui utilisentonbeforeunload
, pas pour les pages qui utilisent l'une des autres méthodes pour attacher des événements.Réponses:
Eh bien, la chose la plus simple à faire est simplement de remplacer directement le script des pages et de réaffecter l'événement à
null
.Cela devrait fonctionner n'importe où, à moins qu'ils ne soient vraiment malveillants, et continuer à les réaffecter eux-mêmes. Dans un tel cas, une boucle pour conserver le réglage
null
fonctionnera probablement.Maintenant, soyez averti, certaines pages l'utilisent pour de bon. Prenez la page de téléchargement YouTube: si vous vous éloignez pendant un téléchargement, vous risquez de perdre des heures de progression! Ou peut-être un formulaire Web que vous remplissez, que vous ne voudrez peut-être pas remplir à nouveau, ou un message (forum / e-mail) que vous ne voudrez peut-être pas retaper. Avec cette fonctionnalité, vous êtes protégé.
Un autre problème est toute page l'utilisant à des fins secondaires, comme la sauvegarde de données par AJAX. Ils peuvent utiliser cet événement pour déclencher l'action d'enregistrement et espèrent que l'utilisateur met suffisamment de temps à cliquer sur le bouton pour que la demande soit traitée. Encore une fois, cela est souvent fait pour vous sauver de vous-même.
Mais, évidemment, nous savons tous que de nombreuses pages l'utilisent pour du mal. Donc, si vous connaissez des pages sur lesquelles vous souhaitez qu'il fonctionne, vous pouvez toujours avoir un système de liste blanche. Il n'y a vraiment aucun moyen de bloquer cette action, sans blocage total
window.onbeforeunload
, et aucune action (éventuellement bonne) qu'elle puisse prendre.Il n'y a aucun moyen (sans connaissance préalable d'un code de pages donné) de conserver les bonnes actions tout en arrêtant la boîte popup. Cette case n'est pas un
alert()
. La boîte est générée par le navigateur, comme le comportement prévu deonbeforeunload
. On le crée en faisant n'importe quelle fonction qu'ils assignent pourwindow.onbeforeunload
retourner une chaîne. Cette chaîne sera imprimée dans le popup.Ainsi, vous ne pourriez pas bloquer le popup sans effacer la fonction.
De plus, si vous trouviez un moyen, tout AJAX échouerait. Le popup laisse le temps aux requêtes de passer, sans lui, les données peuvent être perdues.
Quant à
onunload
, il ne devrait pas être possible de vous bloquer avec cela. Puisqu'il se déclenche après le déchargement de la page. Mais pour être en sécurité, vous pouvez toujours en faire unwindow.onunload = null;
et il faut en prendre soin.la source
onbeforeunload
gestionnaire a fait autre chose d'important? Par exemple, que se passe-t-il si vous faites une brève demande AJAX ou si vous engagez quelque chose sur le stockage HTML5 local? Existe-t-il un moyen d'empêcher simplement lesonbeforeunload
gestionnaires de passer certains appels (c.-à-d.alert()
) Ou de s'exécuter plus longtemps qu'une certaine période de temps? C'est pourquoi j'ai demandé une extension plutôt qu'un simple script de type greasemonkey: il semble que, pour faire cela correctement, il devrait y avoir quelque chose de changé au niveau du moteur JavaScript.la source
Il y a un bon outil qui peut gérer n'importe quel popup ennuyeux sur un système Windows - ClickOff . Vous pouvez le télécharger ici . Je l'ai vérifié et cela fonctionne avec l'alerte "Les modifications que vous avez apportées peuvent ne pas être enregistrées" pour le site SharePoint.
la source