2010-03-10 4 views
1

J'applique un service de recherche appelé SearchInsideOut. Ce service de recherche remplace simplement les résultats de pages Web par des pages Web complètes (Oui, j'ai utilisé iframe).onbeforeunload dilemme: rupture d'iframe vs message ennuyeux sur les boutons refresh/back cliquez

Le problème que j'ai à traiter est celui des pages qui cassent l'iframe.
La solution prometteuse que j'ai trouvée utilise onbeforeunload pour permettre aux utilisateurs de décider de rester ou de quitter mon site.
Mais cela crée également un autre comportement ennuyeux. Lorsque les utilisateurs cliquent sur d'autres liens de mon site, le onbeforeunload sera également déclenché.

J'ai pu résoudre ce problème en plaçant window.onbeforeunload=null dans l'événement onclick des liens de ce site.
Malheureusement, je n'ai aucune idée de la façon de détecter les événements externes, comme en cliquant sur "actualiser/retour" boutons.
Que dois-je faire pour résoudre cette difficulté?

Toutes les suggestions et commentaires sont très appréciés.

+0

Vous devez vous soucier non seulement des sites "frame-busting", mais aussi des sites "frame-busting-buster-busting" (http://stackoverflow.com/questions/958997/frame-buster-buster-buster-code-needed - juste pour avoir un aperçu de ce que l'autre partie tente de faire dans ce conflit armé. –

Répondre

0

Prenons l'exemple de ce site. Essayez d'actualiser la page après avoir tapé du texte répondant à un message. Vous verrez que la page vous demandera de continuer votre travail ou de quitter. Faire un autre test sans répondre à un message, juste rafraîchir, vous verrez que la confirmation ne sera pas affichée, car le site effectue un test si la "réponse" est vide ou non. Exemple:

<html> 
<head> 
<script> 
function closeIt() 
{ 
    var mytext = document.getElementById("mytext").value; 
    if(mytext != "") 
    return "Any string value here forces a dialog box to \n" + 
     "appear before closing the window."; 
} 
window.onbeforeunload = closeIt; 
</script> 
</head> 
<body> 
    <textarea id="mytext"></textarea> 
</body> 
</html> 

Il est à u de décider quand la case affichera ou non. Visitez également Microsoft Msdn pour comprendre quand et comment onbeforeunload fonctionne

Questions connexes