web-dev-qa-db-fra.com

JavaScript ouvert dans une nouvelle fenêtre, pas d'onglet

J'ai une boîte de sélection qui appelle window.open(url) lorsqu'un élément est sélectionné. Firefox ouvrira la page dans un nouvel onglet par défaut. Cependant, j'aimerais que la page s'ouvre dans une nouvelle fenêtre et non dans un nouvel onglet. 

Comment puis-je accomplir cela?

345
adam

Donnez à la fenêtre un paramètre 'specs' avec width/height. Voir ici pour toutes les options possibles.

window.open(url, windowName, "height=200,width=200");

Lorsque vous spécifiez une largeur/hauteur, il s'ouvre dans une nouvelle fenêtre au lieu d'un onglet.

431
DNS

Vous n'avez pas besoin d'utiliser la hauteur, assurez-vous simplement d'utiliser _blank. Sans elle, elle s'ouvre dans un nouvel onglet.

Pour une fenêtre vide:

window.open('', '_blank', 'toolbar=0,location=0,menubar=0');

Pour une URL spécifique:

window.open('http://www.google.com', '_blank', 'toolbar=0,location=0,menubar=0');
100
nwbrad

Je me trompe peut-être, mais d'après ce que j'ai compris, cela est contrôlé par les préférences du navigateur de l'utilisateur, et je ne crois pas que cela puisse être annulé.

80
Jordan S. Jones

Essayer:

window.open("", [window name], "height=XXX,width=XXX,modal=yes,alwaysRaised=yes");

J'ai un code qui fait ce que vous dites, mais il contient beaucoup de paramètres. Je pense que ce sont le strict minimum, laissez-moi savoir si cela ne fonctionne pas, je posterai le reste.

15
theman_on_vista

Vous pouvez essayer la fonction suivante:

<script type="text/javascript">
function open(url)
{
  var popup = window.open(url, "_blank", "width=200, height=200") ;
  popup.location = URL;
}
</script>

Le code HTML pour l'exécution:

<a href="#" onclick="open('http://www.google.com')">google search</a>
10
jgray

Vous ne devriez pas avoir besoin de. Autoriser l'utilisateur à avoir les préférences qu'il souhaite.

Firefox le fait par défaut car ouvrir une page dans une nouvelle fenêtre est ennuyeux et une page ne devrait jamais être autorisée à le faire si ce n'est pas ce que l'utilisateur souhaite. (Firefox vous permet d’ouvrir des onglets dans une nouvelle fenêtre si vous le définissez ainsi).

8
CookieOfFortune

OK, après avoir fait beaucoup de tests, voici ma conclusion:

Quand vous effectuez:

     window.open('www.yourdomain.tld','_blank');
     window.open('www.yourdomain.tld','myWindow');

ou quoi que vous mettiez dans le champ de destination, cela ne changera rien: la nouvelle page sera ouverte dans un nouvel onglet (dépend donc de la préférence de l'utilisateur)

Si vous souhaitez que la page soit ouverte dans une nouvelle fenêtre "réelle", vous devez définir un paramètre supplémentaire. Comme:

window.open('www.yourdomain.tld', 'mywindow','location=1,status=1,scrollbars=1, resizable=1, directories=1, toolbar=1, titlebar=1');

Après les tests, il semble que le paramètre supplémentaire que vous utilisez n’importe pas vraiment: ce n’est pas le fait que vous avez mis "ce paramètre" ou "cet autre" qui crée la nouvelle ).

Mais quelque chose est confus et peut expliquer beaucoup de mauvaises réponses:

Ce:

 win1 = window.open('myurl1', 'ID_WIN');
 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');

Et ça:

 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');
 win1 = window.open('myurl1', 'ID_WIN');

ne donnera PAS le même résultat. 

Dans le premier cas, lorsque vous ouvrez un paramètre de page sans extra, celui-ci s'ouvre dans un nouveau tab. Et dans ce cas, le second appel sera également ouvert dans ce tab en raison du nom que vous donnez.

Dans le second cas, lors de votre premier appel avec le paramètre supplémentaire, la page sera ouverte dans une nouvelle "fenêtre réelle". Et dans ce cas, même si le deuxième appel est effectué sans le paramètre supplémentaire, il sera également ouvert dans cette nouvelle "fenêtre réelle" ... mais même onglet!

Cela signifie que le premier appel est important car il a décidé où placer la page. 

7
Peter

Fait intéressant, j'ai constaté que si vous transmettez une chaîne empty (par opposition à une chaîne nulle ou à une liste de propriétés) pour le troisième attribut de window.open, il s'ouvrirait dans un nouvel onglet pour Chrome, Firefox et IE. Si absent, le comportement était différent.

Alors, voici mon nouvel appel:

 window.open(url, windowName, '');
5
Tom Lianza

La clé est les paramètres:

Si vous fournissez Paramètres [Hauteur = "", Largeur = ""], il s'ouvrira dans de nouvelles fenêtres.

Si vous NE PAS fournir les paramètres, il sera ouvert dans un nouvel onglet.

Testé sous Chrome et Firefox

5
MuniR

essayez cette méthode .....

function popitup(url) {
       //alert(url);
       newwindow=window.open("http://www.zeeshanakhter.com","_blank","toolbar=yes,scrollbars=yes, resizable=yes, top=500, left=500, width=400, height=400");
       newwindow.moveTo(350,150);
   if (window.focus) 
          {
             newwindow.focus()
          }
   return false;
  }
3
Zeeshan Akhter

Je pense que ce n'est pas un problème de propriétés de cible html mais que vous avez décoché "ouvrir les nouvelles fenêtres dans un nouvel onglet", option dans "onglet" onglet sous Firefox "Options" du menu. vérifiez-le et réessayez. 

enter image description here

1
shihab mm

Je viens d'essayer cela avec IE (11) et Chrome (54.0.2794.1 canary SyzyASan):

window.open(url, "_blank", "x=y")

... et il s'est ouvert dans une nouvelle fenêtre. 

Ce qui signifie que Clint pachl avait raison quand il a déclaré que la fourniture d’un paramètre entraînerait l’ouverture de la nouvelle fenêtre.

- et apparemment, il n'est pas nécessaire que ce soit un paramètre légitime!

(YMMV - comme je l'ai dit, je ne l'ai testé qu'à deux endroits ... et la prochaine mise à jour pourrait invalider les résultats, de quelque manière que ce soit)

ETA: Je viens de remarquer, cependant - dans IE, la fenêtre n’a pas de décoration.

1
theGleep

Pour moi la solution était d'avoir

"location=0"

dans le 3ème paramètre. Testé sur le dernier FF/Chrome et une ancienne version de IE11

L'appel de méthode complet que j'utilise est ci-dessous (j'aime utiliser une largeur variable):

window.open(url, "window" + id, 'toolbar=0,location=0,scrollbars=1,statusbar=1,menubar=0,resizable=1,width=' + width + ',height=800,left=100,top=50');
0
DAustin

J'avais la même question mais j'ai trouvé une solution relativement simple. 

En JavaScript, je vérifiais window.opener !=null; pour déterminer si la fenêtre était une fenêtre contextuelle. Si vous utilisez un code de détection similaire pour déterminer si la fenêtre dans laquelle vous êtes sur le site est rendue, vous pouvez facilement "le désactiver" lorsque vous souhaitez ouvrir un " new " window en utilisant la nouvelle fenêtre JavaScript. 

Il suffit de mettre cela en haut de votre page pour que vous souhaitiez toujours être une "nouvelle" fenêtre.

<script type="text/javascript">
    window.opener=null;
</script>

J'utilise ceci sur la page de connexion de mon site afin que les utilisateurs ne soient pas tenus au comportement de pop-up s'ils utilisent une fenêtre contextuelle pour accéder à mon site. 

Vous pouvez même créer une simple page de redirection faisant cela, puis passer à l'URL que vous lui avez indiquée. Quelque chose comme,

JavaScript sur la page parente:

window.open("MyRedirect.html?URL="+URL, "_blank");

Et ensuite, en utilisant un peu de javascript depuis ici vous pouvez obtenir l’URL et y rediriger.

JavaScript sur la page de redirection:

 <script type="text/javascript">
        window.opener=null;

    function getSearchParameters() {
          var prmstr = window.location.search.substr(1);
          return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
    }

    function transformToAssocArray( prmstr ) {
        var params = {};
        var prmarr = prmstr.split("&");
        for ( var i = 0; i < prmarr.length; i++) {
            var tmparr = prmarr[i].split("=");
            params[tmparr[0]] = tmparr[1];
        }
        return params;
    }

    var params = getSearchParameters();
    window.location = params.URL;
    </script>
0
Dan

Répondu ici . Mais poster à nouveau pour référence. 

window.open() ne s'ouvrira pas dans un nouvel onglet s'il ne se produit pas lors d'un événement de clic réel. Dans l'exemple donné, l'URL est en cours d'ouverture lors d'un événement de clic réel. Cela fonctionnera à condition que l'utilisateur dispose des paramètres appropriés dans le navigateur.

<a class="link">Link</a>
<script  type="text/javascript">
     $("a.link").on("click",function(){
         window.open('www.yourdomain.com','_blank');
     });
</script>

De même, si vous essayez d'effectuer un appel ajax dans la fonction de clic et souhaitez ouvrir une fenêtre en cas de succès, assurez-vous que vous effectuez l'appel ajax avec l'option async : false définie.

0
Venkat Kotra