Ouvrir de nouvelles pages par programme sur les onglets


98

J'essaye de "forcer" Safari ou IE7 à ouvrir une nouvelle page en utilisant un nouvel onglet .

Par programme, je veux dire quelque chose comme:

window.open('page.html','newtaborsomething');

1
Je ne suis pas sûr d'avoir compris - développez-vous une application qui fonctionne avec IE et souhaitez-vous ouvrir chaque nouvelle page dans un nouvel onglet? Ou vous voulez simplement configurer l'IE pour ouvrir un nouvel onglet lorsque vous cliquez sur un lien? Ou créez-vous un site avec plus de liens et vous souhaitez qu'ils s'ouvrent séparément? Veuillez le rendre plus clair.
Dungeo

Merci de tous vos commentaires et réponses, je sais que ce n'est pas un gros problème et ne devrait pas être un problème dans mon développement, mais c'est une demande du client, pas une demande importante que je voulais juste savoir. Le problème est que IE7 et Safari n'ouvriront pas de popup avec un onglet utilisant javascript ou un attribut cible, vrai?
Ricardo Vega le

Réponses:


63

Vous ne pouvez pas contrôler cela directement, car c'est une option contrôlée par les utilisateurs d'Internet Explorer.

Ouvrir des pages à l'aide de Window.open avec un nom de fenêtre différent s'ouvrira dans une nouvelle fenêtre de navigateur comme une fenêtre contextuelle, OU s'ouvrira dans un nouvel onglet, si l'utilisateur a configuré le navigateur pour le faire.


Lorsque l'option "Laisser Internet Explorer décider de l'ouverture des fenêtres contextuelles" est sélectionnée, quels critères Internet Explorer utilise-t-il pour prendre cette décision?
Dead.Rabit le

113

Vous pouvez, dans Firefox ça marche, ajouter l'attribut target = "_ newtab" à l'ancre pour forcer l'ouverture d'un nouvel onglet.

<a href="some url" target="_newtab">content of the anchor</a>

En javascript, vous pouvez utiliser

window.open('page.html','_newtab');

Dit cela, je suis partiellement d'accord avec Sam. Vous ne devez pas forcer l'utilisateur à ouvrir de nouvelles pages ou un nouvel onglet sans lui montrer un indice sur ce qui va se passer avant de cliquer sur le lien.

Faites-moi savoir si cela fonctionne également sur un autre navigateur (je n'ai pas la chance de l'essayer sur un autre navigateur que Firefox pour le moment).

Edit: référence ajoutée pour ie7 Peut-être que ce lien peut être utile
http://social.msdn.microsoft.com/forums/en-US/ieextensiondevelopment/thread/951b04e4-db0d-4789-ac51-82599dc60405/


6
Merci pour cette astuce Firefox, maintenant j'ai mis à jour mon addon TargetKiller pour supprimer "_newtab" et "newtab". : P
thenonhacker

1
J'apprécie vraiment votre réponse, mais je sais que Firefox le fera (certains textes, non testés par moi, remarquent que ce n'est pas toujours vrai, il y a 50-50 chance d'avoir une nouvelle fenêtre ou un nouvel onglet). Je pense aussi que cela ne devrait pas être un problème, mais vous connaissez les clients :)
Ricardo Vega

2
Ce n'est peut-être pas le cas sur toutes les versions / plates-formes, mais Firefox 3.5 sous Linux ne vous permet pas de le faire plus d'une fois ... si vous avez plusieurs liens target = "_ newtab" sur votre page, en cliquant sur l'un d'eux ne peuplera qu'un seul nouvel onglet ... c'est-à-dire que les clics suivants écraseront tout ce qui avait été ouvert précédemment dans cet onglet. Cela me fait penser que cela ouvre en fait un onglet nommé "_newtab", plutôt que d'être une solution de contournement spécifique au navigateur.
Rylee Corradini

55
Je suis à peu près sûr que "_newtab" n'a pas de sens, à moins que quelqu'un n'ait une documentation indiquant le contraire. Tout ce que vous faites est d'ouvrir une fenêtre dont le nom est _newtab (c'est pourquoi tous les liens suivants avec cette cible s'ouvrent dans la même fenêtre). Vous pouvez cibler "foo" ou "bar" et voir le même comportement. Les seules cibles connues sont _blank, _self, _parent et _top. htmlcodetutorial.com/linking/_A_TARGET.html
Tom Lianza

43

Ceux d'entre vous qui essaient d'utiliser ce qui suit:

window.open('page.html', '_newtab');

devrait vraiment regarder la méthode window.open.

Tout ce que vous faites est de dire au navigateur d'ouvrir une nouvelle fenêtre NOMMÉE "_newtab" et d'y charger page.html. Chaque nouvelle page que vous chargez se chargera dans cette fenêtre. Cependant, si un utilisateur a configuré son navigateur pour ouvrir de nouvelles pages dans de nouveaux onglets au lieu de nouvelles fenêtres, il ouvrira un onglet. Quoi qu'il en soit, il utilise le même nom pour la fenêtre ou l'onglet.

Si vous voulez que différentes pages s'ouvrent dans différentes fenêtres ou onglets, vous devrez changer le NOM de la nouvelle fenêtre / onglet en quelque chose de différent tel que:

window.open('page2.html', '_newtab2');

Bien sûr, le nom de la nouvelle fenêtre / onglet peut être n'importe quel nom comme page1, page2, page3, etc. au lieu de _newtab2.


3
connaît ses affaires. «_newtab» n'est pas un nom réservé. '_blank' est une chose spéciale qui ouvre une autre fenêtre / onglet non spécifié et sans nom - celui-ci que vous pouvez continuer à utiliser encore et encore. '_newtab' n'est pas spécial, sauf que c'est le nom spécifique que vous avez donné à un nouvel onglet (par défaut) ou à une nouvelle fenêtre, que votre navigateur continue d'actualiser avec l'url que vous lui envoyez.
BradChesney79

14

C'est à l'utilisateur s'il souhaite utiliser de nouveaux onglets ou de nouvelles fenêtres, ce n'est pas au développeur de modifier ce comportement. Je ne pense pas que vous puissiez le faire.

Ma bête noire - je déteste quand les sites me forcent à ouvrir dans une nouvelle fenêtre / onglet - je suis tout à fait capable de prendre cette décision par moi-même. Surtout quand ils le font en javascript - ce n'est vraiment pas utile.


1
+1 à Sam - l'ouverture de nouvelles pages dans des onglets ou des fenêtres est un choix spécifique au navigateur (et à l'utilisateur). En général, je déteste quand un site ouvre une nouvelle fenêtre.
Richard Ev

En plus de cela: Dans la définition "stricte", il n'y a pas d'attribut valide "cible" car il ne dérange pas l'utilisateur. Essayez-le: validator.w3.org
guerda

4
J'aime ouvrir des lots d'onglets à la maison, donc je suis l'utilisateur dans ce cas. Juste un rappel qu'il y a des exceptions.
Mark Essel

7
Bien que je convienne que cela peut être ennuyeux lorsque les sites forcent des actions, je pense qu'il est un peu inutile de dire simplement que vous ne devriez pas faire quelque chose sans considérer les raisons pour lesquelles quelqu'un pourrait vouloir le faire. Il est courant que les sites ouvrent des éléments dans de nouveaux onglets, en particulier des liens de sites externes ou lorsqu'il n'est pas utile de remplacer une page active par un nouveau contenu, ce n'est donc pas un comportement totalement inattendu. Je suggérerais également que ce n'est pas vraiment une réponse à la question et que cela aurait été mieux adapté en tant que commentaire au message original.
andyface

1
Je ne suis pas d'accord, en supposant qu'une valeur par défaut pour l'utilisateur est un choix de conception par application Web et non par navigateur. Le navigateur peut souscrire une valeur par défaut là où l'application ne le fait pas. De plus, si les navigateurs fournissent à l'utilisateur un moyen de remplacer les valeurs par défaut de l'application / les valeurs par défaut du navigateur, alors c'est le meilleur des deux mondes. Utilisateur> Application> Navigateur.
Derek Litz

8

Avez-vous déjà essayé comme

var open_link = window.open('','_blank');
open_link.location="somepage.html";

Est-ce que ce navigateur est compatible? Semble fonctionner dans IE8, inquiet des futures versions ou d'autres navigateurs.
n00b le

Oui .. il est compatible avec les navigateurs croisés. Je n'ai eu aucun problème avec ça jusqu'à présent: D
Thurein Soe

5

J'ai découvert dans Chrome,

window.open('page.html','_newtab')

ne fonctionnera qu'une seule fois.

Vous pouvez utiliser:

window.open(ct.getNewHref(),'_newtab' + Math.floor(Math.random()*999999));

Pour ouvrir plusieurs nouveaux onglets.


10
c'est parce que dans Chrome, _newtab est juste un nom et vous lui demandez d'ouvrir la page dans l'onglet nommé "_newtab"
w00t

3

Le code que j'utilise avec jQuery:

$("a.btn_external").click(function() {
    url_to_open = $(this).attr("href");
    window.open(url_to_open, '_blank');
    return false;
});

Ceci est utile pour faire la distinction entre les événements de clic d'un parent dans un enfant. En utilisant cette méthode, vous ne déclenchez pas l'événement de clic du parent.


8
Pourquoi ne pas utiliser simplement du vieux HTML? <a href="page.html" target="_blank">foo</a>
pixelastic

1
@pixelastic "En utilisant cette méthode, vous ne déclenchez pas l'événement de clic du parent."
Michael Blackburn

3

Cela fonctionne à 100%

window.open('http://www.google.com/','_newtab' + Date.now());


0

Si vous le vouliez, vous pourriez utiliser cette méthode, qui est un peu piratée, mais qui offrirait la fonctionnalité souhaitée:

jQuery('<a/>', {
    id: 'foo',
    href: 'http://google.com',
    title: 'Become a Googler',
    rel: 'external',
    text: 'Go to Google!',
    target:'_blank',
    style:'display:none;'
}).appendTo('#mySelector');

$('#foo').click()

pouvez-vous fournir un jsfiddle?
Xenology

-2

Cela peut fonctionner si vous pouvez appeler un fichier batch (j'utilise php avec XP sp2 et IE8 ... vous pouvez essayer IE7, je ne sais pas). Utilisez ce qui suit (ou similaire) dans votre fichier .bat pour ouvrir Windows: Démarrez "" C: \ Progra ~ 1 \ Intern ~ 1 \ iexplore "http://www.site.com". Il n'y a pas d'espace entre les guillemets et C: \ Progr ... etc. À un certain moment, cela peut commencer à ouvrir de nouvelles fenêtres (c'est-à-dire, target = "_ blank") plutôt que de nouveaux onglets, mais cela fonctionne jusqu'à un certain point; pas largement testé. Pour l'utiliser dans un fichier de commandes standard (CMD.exe), vous devez probablement avoir une fenêtre déjà ouverte. Je partage simplement quelque chose sur lequel je suis tombé par hasard. MODIFIÉ pour clarification.


-7
<a href="http://www.google.com/" target="_self">New Tab Example</a>

Fonctionne dans IE7.

Cordialement,

Glenn


8
Glenn, c'est le contraire de ce que le PO a demandé. _self ouvrira le document dans la même fenêtre ou cadre.
travega

Ce n'est pas non plus la manière d'ouvrir de manière programmatique. La surprise est que comment il gagne +10 rep (+ 3 / -10) avec cette réponse.
vusan le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.