2012-07-28 6 views
0

J'ai un scénario dans lequel si l'utilisateur essaie de fermer la fenêtre courante du navigateur, il devrait afficher une boîte de confirmation. S'il confirme la fermeture de la fenêtre, cette fenêtre devrait se fermer et ouvrir la nouvelle fenêtre avec une URL différente.Ouvrir une nouvelle fenêtre de navigateur à la fermeture de la fenêtre en cours si l'utilisateur confirme la fermeture de la fenêtre en cours

J'ai essayé d'utiliser le code suivant par lequel je suis en mesure d'afficher la case de confirmation, mais je suis incapable de comprendre comment ouvrir la nouvelle fenêtre si l'utilisateur confirme la fermeture du courant.

var preventUnloadPrompt;    
$('a').live('click', function() { preventUnloadPrompt = true; }); 
$('form').live('submit', function() { preventUnloadPrompt = true; }); 
$(window).bind("beforeunload", function() { 
    if (preventUnloadPrompt) 
    { return; } 
    else { 
     return confirm("quit??");    
    } 
}); 

Tout type d'aide est apprécié. Merci.

+0

Il est impossible – Esailija

+0

En théorie, il devrait être possible d'utiliser 'window.open', mais ce n'est pas une bonne idée car la plupart des navigateurs empêcheront probablement d'appeler' window.open' dans l'événement 'unload'. De quoi as-tu besoin pour faire ça? Sûrement si un utilisateur essaie de fermer l'onglet, alors ils veulent quitter le site, ne pas ouvrir un nouvel onglet ...? – ClarkeyBoy

+0

En fait, il y a un ensemble de questions posées une par une à un utilisateur. Si l'utilisateur ferme cette fenêtre, je veux exécuter du code sur une page différente qui marquerait, que cet utilisateur a tenté l'ensemble des questions et l'empêchera donc de réessayer la question à nouveau. Normalement, cela se produit lorsque l'utilisateur a fini de tenter toutes les questions. –

Répondre

1

Lorsqu'une fenêtre se ferme, tout, absolument tout associé à cette fenêtre visible ou non ... en attente du code javascript, des choses à l'écran, etc. disparaît et qui comprend les scripts mêmes qui sont au milieu de execution - poof - gone nada, annulant, stoppant, stoppant, arrêtant tout script courant. Le séquencement temporel nécessite que, sauf pour fermer une fenêtre, toutes les autres opérations initiées par l'utilisateur soient achevées en premier.

exemple:

javascript: 
void(window.open("data:text/html, 
<html> 
<a href=\"javascript:window.open('about:blank');self.close();void(0);\">open & close</a> this link does both<br/> 
<a href=\"javascript:self.close();window.open('about:blank');void(0);\">close & open</a> this does close but open fails 
</html> 
")) 

Les liens peuvent être préconditionnés avec if(confirm("quit??")){ ... }

testé avec:

window.navigator.userAgent = 
Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:11.0) Gecko/20100101 Firefox/11.0 

Bookmark:
Open a new browser window on close of current window if user confirms to close current window

-1
var answer = confirm("quit??"); 
if (answer){ 
    window.open("http://www.google.com/"); 
} 
else{ 
// do something else 
} 
+0

laissez-moi savoir si cela fonctionne –

+0

Une "réponse" est censé être quelque chose que vous * recommander * comme une solution de travail. Pour tout le reste, il y a une section "commentaire" où vous pouvez poser plus de questions ou essayer des choses – YePhIcK

+0

Non, ce n'est pas le cas. En tout cas merci pour la réponse. Je pense que la confirmation ne fonctionne pas avec beforeunload. Ce que j'ai remarqué est que return confirme ("Quit ??"); n'est pas correct. Ce n'est pas celui qui résulte dans la boîte de confirmation. Si j'écris retour "Quit ??" La boîte de confirmation indique Quitter? en première ligne, puis il y a une chaîne disant: Êtes-vous sûr de vouloir quitter cette page? et deux boutons Rester sur cette page et quitter cette page. –

Questions connexes