web-dev-qa-db-fra.com

Ouvrir par programme de nouvelles pages sur des onglets

J'essaie 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');
93
Ricardo Vega

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

L'ouverture de pages à l'aide de Window.open avec un nom de fenêtre différent s'ouvrira dans une nouvelle fenêtre du navigateur telle qu'une fenêtre contextuelle,OUs'ouvrira dans un nouvel onglet, si l'utilisateur a configuré le navigateur pour le faire.

61
thenonhacker

Vous pouvez, dans Firefox cela fonctionne, 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');

Cela dit, 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 d'indication sur ce qui va se passer (antérieur} _ il clique sur le lien.

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

Edit: ajout de la référence 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/

109
Eineki

Ceux d'entre vous essayant 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 sera chargée dans cette fenêtre. Toutefois, si un navigateur a configuré son navigateur pour ouvrir de nouvelles pages dans de nouveaux onglets au lieu de nouvelles fenêtres, un onglet sera ouvert. Quoi qu'il en soit, il utilise le même nom pour la fenêtre ou l'onglet.

Si vous souhaitez que différentes pages s'ouvrent dans des fenêtres ou des onglets différents, vous devrez changer le NOM de la nouvelle fenêtre/onglet en un autre, tel que

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

Bien sûr, le nom de la nouvelle fenêtre/onglet pourrait être un nom tel que page1, page2, page3, etc. au lieu de _newtab2.

42
Bob Lindabury

C'est à l'utilisateur de décider 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.

La bête noire - je déteste quand les sites me contraignent à ouvrir dans une nouvelle fenêtre/onglet - je suis tout à fait capable de prendre cette décision moi-même Surtout quand ils le font en javascript - c'est vraiment inutile.

14
Sam Meldrum

Avez-vous déjà essayé comme

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

J'ai découvert dans Chrome,

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

ne fonctionnera qu'une fois.

Vous pouvez utiliser:

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

Pour ouvrir plusieurs nouveaux onglets.

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 click du parent.

2
lacroixca

Si vous le souhaitez, vous pouvez utiliser cette méthode, qui est un peu compliquée, mais qui offre les fonctionnalités souhaitées

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()
0
Xenology