2008-12-09 10 views
1

Quelle est la meilleure façon de fermer une fenêtre de navigateur d'une application AJAX ASP.NET après l'exécution du serveur.Fermer une fenêtre de navigateur d'une application ASP.NET et AJAX

J'ai trouvé ce solution, mais il semble un peu complexe pour ce que je veux accomplir. Ou est-ce le meilleur moyen d'accomplir ma tâche.

MISE À JOUR: je dois fermer la fenêtre après pression sur la touche

MISE À JOUR 1: J'ai essayé la solution de l'autre SO question, et il ne fonctionne pas pour moi.

<asp:Button ID="btnMyButton" runat="server" onClick="btnMyButton_Click" /> 

protected void btnMyButton_Click(object sender, EventArgs e) 
{ 
} 

J'ai utilisé le code suivant dans ma page, mais le « La page Web que vous consultez essaie de fermer les fenêtres » fenêtre du module apparaît.

if (ScriptManager.GetCurrent(this).IsInAsyncPostBack) 
      ScriptManager.RegisterStartupScript(upApproveRequest, typeof(string), "closeWindow", "window.close();", true); 

Un moyen d'empêcher cela?

+0

Comment as-ce jamais aller? –

+0

@Gortok - J'ai trouvé une solution pour définir l'événement OnClientClick avec la fonction JavaScript du bouton qui ferme la fenêtre enfant lorsqu'elle est ouverte à partir de la page parente. –

Répondre

1

Non, il est impossible de fermer une fenêtre de navigateur sans le consentement de l'utilisateur. Vous pouvez les déconnecter de leur application, mais vous ne pouvez pas fermer de force la fenêtre du navigateur.

+0

Je dois implémenter une solution différente à cause de ce problème. Merci pour la contribution. –

+0

Pas de problème. Puis-je vous demander pourquoi vous essayez de fermer leur page? –

+0

L'utilisateur approuvait/refusait une demande dans notre application et voulait fermer automatiquement la page lorsqu'il cliquait sur le bouton d'approbation ou de refus. –

-2

C'est à peu près tout. Vous pouvez simplement utiliser ScriptManager.RegisterStartupScript(...)

1

En fait, vous pouvez le faire en plaçant le code suivant dans votre événement de clic de bouton.

protected void btnMyButton_Click(object sender, ImageClickEventArgs e) 
{ 
    // Update database 
    bool success = Presenter.DoDatabaseStuff(); 

    if (success) 
    { 
     // Close window after success 
     const string javaScript = "<script language=javascript>window.top.close();</script>"; 
     if (!ClientScript.IsStartupScriptRegistered("CloseMyWindow")) 
     { 
      ClientScript.RegisterStartupScript(GetType(),"CloseMyWindow", javaScript); 
     } 
    } 
    else 
    { 
     // Display failure result 
     result_msg_area.Visible = true; 
     lblError.Text = "An error occurred!";     
    } 
} 
0

Pour éviter l'avertissement de script, vous pouvez utiliser ceci:

window.open('', '_self', '');window.close(); 

Alors:

if (ScriptManager.GetCurrent(this).IsInAsyncPostBack) 
     ScriptManager.RegisterStartupScript(upApproveRequest, typeof(string), "closeWindow", "window.open('', '_self', '');window.close();", true); 
Questions connexes