Certains sites, comme StackExchange, affichent un "Êtes-vous sûr de vouloir quitter cette page?" dialogue lorsque vous essayez de partir dans certaines conditions, par exemple si vous avez un message que vous n’avez pas terminé de modifier. C'est utile!
Malheureusement, les sites malveillants ou infectés préfèrent utiliser la même fonctionnalité pour dire: "Hé! Vous n'avez pas installé notre malwareun antivirus pour traiter les 111 virus sur lesquels nous ne mentons absolument pas! ", et les options" Quitter cette page "et" Rester sur cette page "sont remplacées par le libellé" Soyez en sécurité. Installez notre produit "et" Tirez-vous dans le pied ". Cela n’aide en rien!
Javascript peut faire des choses désagréables. Quand un de ces dialogues tente de m'empêcher de quitter un site clairement malveillant, quelle devrait être ma réponse? Est-il prudent de cliquer sur "Quitter cette page" ou de remplacer le texte par quoi que ce soit? Un site peut-il modifier le comportement du bouton ou intercepter ma tentative de navigation et dessiner son propre faux dialogue faisant tout ce qu'un attaquant veut quand je clique dessus?
Malgré ce que disent certains de ces dialogues, ils ne peuvent rien faire de malicieux . Vous pouvez toujours cliquer sur OK ou Quitter la page pour fermer la page incriminée sans aucune conséquence.
Si la boîte de dialogue est trop longue et que les boutons sont éteints , vous pouvez appuyer sur Enter pour confirmer la fermeture de la page.
Si vous ne possédez pas de clavier (appareils à écran tactile), utilisez le bookmarklet ci-dessous ou reportez-vous à la section Réponse de SimpleSimon (Chrome uniquement).
Maintenant, quelques détails.
Il n’ya qu’un moyen d’effectuer une action lors de la fermeture d’une page: via l’événement onbeforeunload
. Bien sûr, cela pourrait être facilement utilisé contre l'utilisateur (par exemple, lorsqu'il tente de fermer une page, sa copie s'ouvre dans une nouvelle fenêtre), donc c'est très limité.
En fait, la seule chose raisonnable à faire est d'ouvrir une boîte de dialogue avec du texte personnalisé et deux boutons, l'un pour quitter la page et l'autre pour rester. La seule chose qu'une page puisse faire avec ce dialogue est de définir son texte. Les boutons et la barre de titre sont immuables. Voici une capture d'écran de Firefox 3.6: ( très ancienne version de Firefox)
Bien sûr, lorsque vous laissez les gens afficher des fenêtres contextuelles avec un texte et juste des boutons OK/Annuler , alors vous pouvez être sûr que plus tôt ou plus tard, certains gars l'utiliseront contre vous.
Dans la capture d'écran ci-dessus OK signifie simplement "Quitter cette page", mais la description personnalisée suggère quelque chose de plus. Les navigateurs ont donc modifié les boîtes de dialogue, il est donc difficile de les rendre trompeuses. Par exemple, les versions récentes de Firefox semblent ignorer le texte personnalisé:
Chrome affiche le texte personnalisé, mais ajoute toujours une question demandant à l'utilisateur ce qu'il veut faire et les boutons indiquent explicitement leurs actions: (mais cela reste sujet aux messages "cat videos"!)
Voici Internet Explorer 10, également "sujet de chat":
Opera 12 ignore simplement l'événement onbeforeunload
et si vous essayez de fermer un onglet comme celui-ci, il se fermera comme un autre. Je n'ai cependant pas testé le dernier opéra.
Donc, pour résumer les choses les plus importantes:
Vous pouvez désactiver l'événement onbeforeunload
si vous le souhaitez, empêchant ainsi les pages de vous demander de quitter ou de rester. Voici un multi-navigateur serscript . (faites défiler vers le bas si le lien est mort)
Si vous êtes sur un site Web spécifique qui affiche une fenêtre contextuelle malveillante et que vous avez toujours peur de cliquer sur Laisser , vous pouvez créer un bookmarklet pour le supprimer. Cliquez avec le bouton droit de la souris sur la barre de favoris, choisissez un nouveau favori (ou son équivalent) et collez-le sous forme d'URL: (il s'agit simplement d'un code minifed du lien ci-dessus)
javascript:var x=document.createElement('script');x.type='text/javascript';x.innerHTML='onbeforeunload=function(){};';document.body.appendChild(x);
Ensuite, cliquez simplement sur ce signet et la fenêtre contextuelle sera temporairement supprimée de la page active.
Si vous souhaitez tester l'apparence de ces fenêtres contextuelles dans votre navigateur ou le bookmarklet/userscript, créez un fichier texte avec le code suivant et enregistrez-le sous un fichier .html
:
<html><body onbeforeunload="return 'My custom text.'">_</body></html>
Il semble que le lien avec le script d’utilisateur soit mort, c’est donc une copie extraite de archive.org cache . Tout crédit pour le créateur de script original.
// ==UserScript==
// @name Disable - remove onbeforeunload
// @namespace
// @description Disable - remove the annoying onbeforeunload event
// @include *
// @author netvisiteurs.com
// ==/UserScript==
var x = document.createElement('script');
x.type = 'text/javascript';
x.innerHTML = 'onbeforeunload = function() {};';
document.body.appendChild(x);
En fait, FireFox a une solution plutôt astucieuse (et facile). Si vous tapez
about:config
dans la barre d'adresse, puis faites défiler jusqu'à
dom.disable_beforeunload
et définissez sa valeur sur True, vous ne verrez plus les fenêtres contextuelles Quitter la page. Dans FireFox. Dommage qu'il n'y ait pas de solution similaire dans Chrome.
La solution la plus simple dans Chrome consiste à bloquer l’onglet.
Tapez chrome: // crash dans la barre d'adresse et enregistrez sous un signet .
La prochaine fois que vous voudrez quitter une telle page, cliquez simplement sur le signet pour supprimer instantanément cet onglet, sans affecter vos autres onglets. Pas besoin de tuer toute la session du navigateur comme l'ont suggéré d'autres.
Sinon, vous pouvez accrocher l'onglet en utilisant chrome: // hang, puis fermez-le simplement sans utiliser JavaScript.
Pas sûr que cela soit possible dans d'autres navigateurs.
Ceci est l'événement window.onbeforeunload et une fonctionnalité du navigateur Web. Donc, cela devrait être un dialogue fixe du navigateur Web. Vous pouvez essayer dans différents navigateurs et ainsi vous pouvez voir que les boîtes de dialogue sont dans différentes conceptions.
Mais je suppose que vous pourriez développer un popup avec javascript, qui ressemble beaucoup au très original du popup. Et s'il s'agit d'un bon développeur, il vérifiera également le type de navigateur avant d'afficher la boîte de dialogue. ;)
Vous devez donc vérifier en parallèle le bon dialogue, par exemple ici: http://samples.msdn.Microsoft.com/workshop/samples/author/dhtml/refs/onbeforeunload. htm
Voir ici pour plus d'informations sur l'événement:
https://developer.mozilla.org/en-US/docs/Web/API/window.onbeforeunload
http://msdn.Microsoft.com/en-us/library/ms536907%28VS.85%29.aspx
Solution de contournement rapide si vous ne faites pas confiance au "popup" et à ses intentions/actions:
Pour Chrome:
Échapper pour supprimer les pop-up
Clic droit sur la page
Sélectionnez inspecter
Faites défiler vers le haut
Clic droit sur la balise
Supprimer le nœud
Fermer l'onglet
Je suis sûr que les autres navigateurs ont des options similaires.