4 votes

Ouvrez la fenêtre et fermez-la immédiatement

Il y a un moyen en JS d'ouvrir une fenêtre et de la fermer immédiatement, de sorte qu'elle ne s'ouvre pas dans un nouvel onglet, je veux simplement ouvrir une fenêtre (comme en arrière-plan si possible) effectuer certaines vérifications et la fermer immédiatement, sans que le nouvel onglet ne s'ouvre, est-ce possible?

Quelque chose comme ça mais sans l'effet que la fenêtre est ouverte...

 var popup = window.open("http://www.google.com");

popup.close();

MISE À JOUR: Voici la solution que j'ai trouvée mais ça clignote parfois et je veux l'éviter...

function goNewWin() {

    var TheNewWin = window.open("http://www.yahoo.com", 'TheNewpop', 'toolbar=1,location=1,directories=1,status=1,menubar=1,scrollbars=1,resizable=1');

    TheNewWin.blur();
    TheNewWin.close();

}

1voto

Pritish Vaidya Points 10616

Une solution à votre problème consiste à utiliser la fonction window.postMessage(). Le child est utilisé pour notifier le parent que la fenêtre a été chargée et fonctionne également sur un domaine croisé.

Child

$(window).load(function(){
    this.opener.postMessage({'loaded': true}, "*");
    this.close();
});

Parent

$(window).on('message', function(event) {     
    alert(event.originalEvent.data.loaded);
}); 

Il existe également une autre méthode décrite dans ce thread de stackoverflow.

Tous les crédits sont attribués à l'auteur de la discussion stack overflow de ce thread

1voto

ConnorsFan Points 468

Même si vous appelez close immédiatement après window.open, et même si vous essayez de positionner la fenêtre contextuelle en dehors de l'écran ou de la dimensionner à zéro, vous la verrez rapidement s'afficher à l'écran :

var popup = window.open("", "Popup", "left=10000,top=10000,width=0,height=0");
popup.close();

Pour des raisons de sécurité, window.open ne peut pas positionner la fenêtre contextuelle en dehors de l'écran et ne peut pas la rendre plus petite qu'une taille minimale. Voici un extrait du sujet window.open dans la documentation MDN :

Les valeurs de position et de dimension demandées dans la liste des fonctionnalités ne seront pas prises en compte et seront corrigées si l'une de ces valeurs demandées ne permet pas à la fenêtre du navigateur entière d'être affichée dans la zone de travail de l'application du système d'exploitation de l'utilisateur. Aucune partie de la nouvelle fenêtre ne peut être initialement positionnée hors écran. C'est par défaut dans toutes les versions de navigateurs basées sur Mozilla.

Des restrictions similaires s'appliquent dans Internet Explorer, comme indiqué dans ce document. La taille minimale est de 250 × 150 dans Internet Explorer, et la taille minimale "intérieure" est de 100 × 100 dans Firefox.

Si vous voulez absolument éviter l'affichage de la fenêtre contextuelle clignotante, vous pouvez utiliser l'une de ces méthodes :

  • Au lieu de tester avec un appel à window.open, affichez un avertissement sur la page pour informer l'utilisateur que l'option de blocage des fenêtres contextuelles ne devrait pas être activée (comme suggéré ici par UncaAlby)
  • Laissez l'application s'exécuter et avertissez l'utilisateur, après coup, si la vraie fenêtre contextuelle n'a pas pu être affichée
  • Utilisez une alternative à window.open, par exemple le widget de dialogue de jQuery UI ou les modals de Bootstrap

1voto

function closeWin() {
    window.close();
    return true;
}

0voto

Mitul Points 2848

// Code de la page à partir de laquelle vous souhaitez ouvrir la popup, elle s'ouvrira dans le coin inférieur droit.

var popup = window.open("popup.html", "Popup", "height=1, width=1, status=no, toolbar=no, menubar=no, location=no, top = 100000, left=100000 ");

// Dans votre popup.html, ajoutez le code suivant

this.close();

0voto

CroMagnon Points 1056

Que diriez-vous de créer dynamiquement un iframe dans la fenêtre actuelle. Ensuite, vous pouvez ouvrir n'importe quelle page dessus, vous pourriez ensuite détruire l'élément iframe à tout moment.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X