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');
Ricardo Vega
la source
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.

alorsonhacker
la source
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/

Eineki
la source
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.

Bob Lindabury
la source
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.

Sam Meldrum
la source
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";
Thurein Soe
la source
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.

Derek 朕 會 功夫
la source
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.

lacroixca
la source
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());

Kevin Muchwat
la source
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()
Xénologie
la source
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.

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

Fonctionne dans IE7.

Cordialement,

Glenn

Glenn Moore
la source
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