web-dev-qa-db-fra.com

Comment puis-je fermer une fenêtre avec Javascript sur Mozilla Firefox 3?

Je dois fermer l'onglet qui affiche ma page Web, en cliquant sur un bouton. Mais Firefox ne permet pas de fermer la fenêtre par javascript tant qu'elle n'est pas ouverte par javascript. Si je mets la valeur de dom.allow_scripts_to_close_windows À "true", alors même la fonction window.close() normale fonctionne aussi. Mais ce n'est pas une bonne solution. :(

J'ai essayé la solution de contournement suivante suggérée dans l'un des forums:

<script language="javascript" type="text/javascript">
function closeWindow() {
   window.open('','_parent','');
   window.close();
}
</script> 

Il est censé tromper le navigateur en lui faisant croire qu'il a été réellement ouvert par javascript, mais cela ne fonctionne pas dans Firefox 3.

Quelqu'un peut-il suggérer une solution de contournement?

24
Anindya Sengupta
function closeWindow() {
    netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
    alert("This will close the window");
    window.open('','_self');
    window.close();
}

closeWindow();
10
neo x

Pour des raisons de sécurité, votre script ne peut pas fermer une fenêtre/un onglet qu'il n'a pas ouvert.

La solution consiste à présenter l'invite d'âge à un stade antérieur de l'historique de navigation. Ensuite, vous pouvez choisir de leur permettre d'entrer sur votre site ou non en fonction de leur entrée.

Au lieu de fermer la page qui présente l'invite, vous pouvez simplement dire "Désolé", ou peut-être rediriger l'utilisateur vers sa page d'accueil.

7
Andy

Ce code fonctionne à la fois pour IE 7 et la dernière version de Mozilla bien que le paramètre par défaut dans mozilla ne permette pas de fermer une fenêtre via javascript.

Voici le code:

function F11 () {window.open ('', '_ parent', ''); window.open ("login.aspx", "", "channelmode"); window.close (); }

Pour modifier le paramètre par défaut:

1. tapez "about: config" dans votre barre d'adresse Firefox et entrez;

2. assurez-vous que votre "dom.allow_scripts_to_close_windows" est vrai

6
U2

self.close () ne fonctionne pas, êtes-vous sûr de fermer une fenêtre et non un popup généré par script?

vous voudrez peut-être regarder ceci: https://bugzilla.mozilla.org/show_bug.cgi?id=183697

2
Salvin Francis

Si les gens du navigateur voient cela comme un problème de sécurité et/ou de convivialité, la réponse à votre question est simplement de ne pas fermer la fenêtre, car par définition, ils trouveront des solutions pour votre solution de contournement de toute façon. Il y a une belle synthèse sur les raisons pour lesquelles le choix a été dans la base de données de bogues firefox https://bugzilla.mozilla.org/show_bug.cgi?id=190515#c7

Alors que peux-tu faire?

Modifiez les spécifications de votre site Web afin d'avoir une solution pour ces personnes. Vous pouvez, par exemple, en profiter pour les diriger vers un partenaire.

Autrement dit, voyez-le comme un transfert à quelqu'un d'autre qui en a (potentiellement) besoin. À titre d'exemple, Hanselman avait un article récent sur ce qu'il faut faire dans l'autre situation similaire, à savoir les erreurs 404: http://www.hanselman.com/blog/PutMissingKidsOnYour404PageEntirelyClientSideSolutionWithYQLJQueryAndMSAjax.aspx

1
Cine

Ce code fonctionnera définitivement

function closing() {
var answer = confirm("Do you wnat to close this window ?");
    if (answer){
        netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserWrite');
        window.close();
    }
    else{
        stop;
    }
}
1
kamlesh

Du point de vue de l'expérience utilisateur, vous ne voulez pas qu'une action majeure soit effectuée de manière passive.

Un élément majeur comme la fermeture d'une fenêtre doit être le résultat d'une action de l'utilisateur.

1
Zack Marrapese