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