2009-09-06 6 views
1

J'ai une exigence que lorsque l'utilisateur clique sur le bouton [X] du navigateur, je devrais leur donner un message.Problème avec Javascript onUnload méthode

J'ai accompli cette tâche en utilisant la méthode onUnload de JavaScript.

Maintenant, même si je rafraîchis la page, le même message apparaît également!

Pourquoi est-ce ainsi et comment surmonter?

Le code est ici

< DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.0 Transitional // EN" > <HTML> < TÊTE > < script language = "javascript" >

message fonction

()

{ d'alerte («Êtes-vous SRE vous wan t partir? "); }

</script > </HEAD >

< CORPS onUnload = "Message();" > </BODY > </HTML >

S'il vous plaît aider

Répondre

6

C'est un comportement correct: rafraîchir la page implique le décharger puis le charger à nouveau.

La meilleure façon d'aborder une telle boîte de dialogue de confirmation est avec le code comme ceci:

<script language="javascript" type="text/javascript"> 
window.onbeforeunload = function() { 
    return "You have unsaved changes."; 
} 
</script> 

C'est le mécanisme que vous voyez, par exemple, sur GMail si vous essayez de fermer une page lorsque votre message hasn » t été enregistré ou envoyé pour le moment. Il se déclenchera toujours lorsque vous tenterez d'actualiser la page. Il est donc important de vous assurer de ne renvoyer une chaîne d'erreur que s'il existe réellement un travail non enregistré.

S'il vous plaît garder à l'esprit qu'il n'y a aucune garantie que les événements onUnload ou onBeforeUnload se déclenche, car il n'y a aucune garantie que votre visiteur aura même JavaScript activé, vous ne devriez pas l'utiliser pour quoi que ce soit plus d'un rappel amical sur le travail non enregistré.

+9

+1 "Vous avez des modifications non enregistrées" est la seule bonne raison pour une confirmation de déchargement. Les sites qui harcèlent «s'il vous plaît rester sur ce site charmant» laissant des messages sont un crime contre le web, et les concepteurs qui les produisent sont passibles de poursuites et de punitions sévères à la Cour internationale de justice Web. – bobince

+2

bobince pour la présidence web! :) – vsync

+0

@bobince - mais certaines personnes vont l'utiliser comme des spams, 'Cliquez rester pour un coupon de réduction de 50%!' (-_-) –

2

Il n'y a malheureusement pas d'événement javascript pour détecter le clic sur le bouton X (fermeture du navigateur). Le plus proche que nous arrivons est les événements onunload ou onbeforeunload. Et, oui, ils se déclenchent indépendamment de la méthode que l'utilisateur choisit pour naviguer loin de la page. Que ce soit en fermant le navigateur, en cliquant sur un lien, en entrant une autre URL ou en rechargeant une page. C'est ce que vous avez découvert.

Je ne sais pas si cela va résoudre votre problème puisque nous StackOverflowers ne savons pas au sujet de votre application, mais vous pouvez créer une bidouille semblable à ceci:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html> 
<head> 
<script type="text/javascript"> 
function Message() 
{ 
    if (reallyExiting) alert("Are you sure you want to leave?"); 
} 

</script> 
</head> 
<body onload="reallyExiting=true;" onunload="return Message();"> 
<a href="example.html" onclick="reallyExiting=false">Not really leaving</a> 
<a href="http://www.someOtherSite.com">Really leaving</a> 
</body> 
</html> 

Je sais qu'il est difficile, mais vous pouvez utilisez une variable similaire pour garder une trace des liens qu'ils ont touchés ou non, selon le cas.

HTH.

+0

Je pense que cela devrait être 'return Message();' au lieu de simplement 'Message(); '... –

+0

Réponse mise à jour. Merci @Derek. – Rap

Questions connexes