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');
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.
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/
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.
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.
Avez-vous déjà essayé comme
var open_link = window.open('','_blank');
open_link.location="somepage.html";
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.
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.
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()