J'essaie d'ouvrir une URL dans un nouvel onglet, par opposition à une fenêtre contextuelle.
J'ai vu des questions connexes où les réponses ressembleraient à quelque chose comme:
window.open(url,'_blank');
window.open(url);
Mais aucun d'entre eux n'a fonctionné pour moi, le navigateur a quand même essayé d'ouvrir une fenêtre contextuelle.
javascript
marque
la source
la source
Réponses:
Rien de ce qu'un auteur peut faire ne peut choisir d'ouvrir dans un nouvel onglet au lieu d'une nouvelle fenêtre; c'est une préférence de l'utilisateur . (Notez que la préférence utilisateur par défaut dans la plupart des navigateurs est pour les nouveaux onglets, donc un test trivial sur un navigateur où cette préférence n'a pas été modifiée ne le démontrera pas.)
CSS3 a proposé une nouvelle cible , mais la spécification a été abandonnée .
L' inverse n'est pas vrai; en spécifiant les dimensions de la fenêtre dans le troisième argument de
window.open()
, vous pouvez déclencher une nouvelle fenêtre lorsque la préférence est pour les onglets.la source
window.open
indique au navigateur d'ouvrir quelque chose de nouveau, puis le navigateur ouvre ce qui est choisi dans ses paramètres - onglet ou fenêtre. Dans les navigateurs que vous avez testés, modifiez les paramètres pour les ouvrir dans une nouvelle fenêtre au lieu d'un onglet et vous verrez que les solutions des autres sont fausses.C'est un truc,
Dans la plupart des cas, cela devrait se produire directement dans le
onclick
gestionnaire du lien pour empêcher les bloqueurs de fenêtres publicitaires et le comportement par défaut de la "nouvelle fenêtre". Vous pouvez le faire de cette façon ou en ajoutant un écouteur d'événements à votreDOM
objet.http://www.tutsplanet.com/open-url-new-tab-using-javascript/
la source
window.open()
ne s'ouvrira pas dans un nouvel onglet s'il ne se produit pas lors de l'événement de clic réel. Dans l'exemple donné, l'URL est en cours d'ouverture sur l'événement de clic réel. Cela fonctionnera à condition que l'utilisateur dispose des paramètres appropriés dans le navigateur .De même, si vous essayez de faire un appel Ajax dans la fonction de clic et que vous souhaitez ouvrir une fenêtre en cas de succès, assurez-vous de faire l'appel Ajax avec le
async : false
jeu d'options.la source
async: false
ne fonctionne pas dans Chrome. Pour ouvrir une nouvelle fenêtre à partir du rappel, vous devez d'abord ouvrir une fenêtre vide avant d'envoyer la demande HTTP, puis la mettre à jour. Voici un bon hack .window.open
Impossible d'ouvrir de manière fiable des fenêtres contextuelles dans un nouvel onglet dans tous les navigateursDifférents navigateurs mettent en œuvre le comportement de
window.open
de différentes manières, en particulier en ce qui concerne les préférences du navigateur d'un utilisateur. Vous ne pouvez pas vous attendre à ce que le même comportementwindow.open
soit vrai dans tous les navigateurs Internet Explorer, Firefox et Chrome, en raison des différentes manières dont ils gèrent les préférences du navigateur d'un utilisateur.Par exemple, les utilisateurs d'Internet Explorer (11) peuvent choisir d'ouvrir des fenêtres contextuelles dans une nouvelle fenêtre ou un nouvel onglet, vous ne pouvez pas forcer les utilisateurs d'Internet Explorer 11 à ouvrir des fenêtres contextuelles d'une certaine manière
window.open
, comme mentionné dans la réponse de Quentin .En ce qui concerne les utilisateurs de Firefox (29), l'utilisation
window.open(url, '_blank')
dépend des préférences de l'onglet de leur navigateur, mais vous pouvez toujours les forcer à ouvrir des fenêtres contextuelles dans une nouvelle fenêtre en spécifiant une largeur et une hauteur (voir la section "Qu'en est-il de Chrome?" Ci-dessous).Manifestation
Accédez aux paramètres de votre navigateur et configurez-le pour ouvrir des fenêtres contextuelles dans une nouvelle fenêtre.
Internet Explorer (11)
Page de test
Après avoir configuré Internet Explorer (11) pour ouvrir des fenêtres contextuelles dans une nouvelle fenêtre comme illustré ci-dessus, utilisez la page de test suivante pour tester
window.open
:Notez que les popups sont ouverts dans une nouvelle fenêtre, pas un nouvel onglet.
Vous pouvez également tester ces extraits ci-dessus dans Firefox (29) avec sa préférence de tabulation définie sur de nouvelles fenêtres, et voir les mêmes résultats.
Et Chrome? Il implémente
window.open
différemment d'Internet Explorer (11) et de Firefox (29).Je ne suis pas sûr à 100%, mais il semble que Chrome (version
34.0.1847.131 m
) ne semble pas avoir de paramètres que l'utilisateur peut utiliser pour choisir d'ouvrir ou non des fenêtres contextuelles dans une nouvelle fenêtre ou un nouvel onglet (comme Firefox et Internet Explorer avoir). J'ai vérifié la documentation de Chrome pour gérer les fenêtres pop-up , mais cela ne mentionnait rien de ce genre de chose.De plus, une fois de plus, différents navigateurs semblent implémenter le comportement de
window.open
différemment. Dans Chrome et Firefox, la spécification d'une largeur et d'une hauteur forcera une fenêtre contextuelle, même lorsqu'un utilisateur a configuré Firefox (29) pour ouvrir de nouvelles fenêtres dans un nouvel onglet (comme mentionné dans les réponses à JavaScript ouvert dans une nouvelle fenêtre, pas un onglet ) :Cependant, le même extrait de code ci - dessus ouvrira toujours un nouvel onglet dans Internet Explorer 11 si les utilisateurs définissent des onglets en tant que préférences de navigateur, ne spécifiant même pas une largeur et une hauteur forcera une nouvelle fenêtre contextuelle pour eux.
Ainsi, le comportement de
window.open
Chrome semble être d'ouvrir des fenêtres contextuelles dans un nouvel onglet lorsqu'il est utilisé dans unonclick
événement, de les ouvrir dans de nouvelles fenêtres lorsqu'il est utilisé à partir de la console du navigateur ( comme noté par d'autres personnes ), et de les ouvrir dans de nouvelles fenêtres lorsque spécifié avec une largeur et une hauteur.Sommaire
Différents navigateurs implémentent le comportement de
window.open
différemment en ce qui concerne les préférences de navigation des utilisateurs. Vous ne pouvez pas vous attendre à ce que le même comportementwindow.open
soit vrai dans tous les navigateurs Internet Explorer, Firefox et Chrome, en raison des différentes manières dont ils gèrent les préférences du navigateur d'un utilisateur.Lecture supplémentaire
window.open
documentation .la source
Bon mot:
Il crée un
a
élément virtuel , le donnetarget="_blank"
pour qu'il s'ouvre dans un nouvel onglet, lui donne le bonurl
href
puis clique dessus.Et si vous le souhaitez, sur cette base, vous pouvez créer une fonction:
et ensuite vous pouvez l'utiliser comme:
Note importante:
openInNewTab
(ainsi que toute autre solution sur cette page) doit être appelée pendant le rappel de l'action de l'utilisateur - par exemple. événement de clic interne (pas nécessaire dans la fonction de rappel directement, mais pendant l'action de clic).Si vous l'appelez manuellement à un moment aléatoire (par exemple, dans un intervalle ou après une réponse du serveur) - il pourrait être bloqué par le navigateur (ce qui est logique car ce serait un risque pour la sécurité et pourrait conduire à une très mauvaise expérience utilisateur )
la source
$('<a />',{'href': url, 'target', '_blank'}).get(0).click();
Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();
Si vous utilisez
window.open(url, '_blank')
, il sera bloqué (bloqueur de popup) sur Chrome.Essaye ça:
Avec du JavaScript pur,
la source
the request was made in a sandboxed frame whose 'allow-popups' permission is not set
Pour élaborer la réponse de Steven Spielberg, je l'ai fait dans un tel cas:
De cette façon, juste avant que le navigateur ne suive le lien, je définis l'attribut cible, il ouvrira donc le lien dans un nouvel onglet ou une nouvelle fenêtre (en fonction des paramètres de l'utilisateur ).
Exemple d'une ligne dans jQuery:
Cela peut également être accompli simplement en utilisant les API DOM du navigateur natif:
la source
J'utilise ce qui suit et ça marche très bien!
la source
Je pense que vous ne pouvez pas contrôler cela. Si l'utilisateur a configuré son navigateur pour ouvrir des liens dans une nouvelle fenêtre, vous ne pouvez pas forcer cela à ouvrir des liens dans un nouvel onglet.
JavaScript s'ouvre dans une nouvelle fenêtre, pas dans un onglet
la source
Un fait intéressant est que le nouvel onglet ne peut pas être ouvert si l'action n'est pas invoquée par l'utilisateur (en cliquant sur un bouton ou quelque chose) ou si elle est asynchrone, par exemple, cela ne s'ouvrira pas dans le nouvel onglet:
Mais cela peut s'ouvrir dans un nouvel onglet, selon les paramètres du navigateur:
la source
<script>open('http://google.com')</script>
dans un.html
fichier et ouvrez-le dans une nouvelle installation d'une version récente de Firefox; vous remarquerez que Firefox ouvre joyeusement Google dans un nouvel onglet (peut-être après que vous lui ayez dit d'autoriser les fenêtres contextuelles), pas dans une nouvelle fenêtre.Le fait d'omettre simplement les paramètres [strWindowFeatures] ouvrira un nouvel onglet, À MOINS QUE le paramètre du navigateur ne remplace (le paramètre du navigateur l'emporte sur JavaScript).
Nouvelle fenetre
Nouvel onglet
-- ou --
la source
la source
Vous pouvez utiliser une astuce avec
form
:Démo jsFiddle
la source
name
comme clé etvalue
valeur pour tous les paramètres à l'intérieur des paramètres de requête. Et ensuite soumettre le formulairea
balise au lieu d'un formulaire et en utilisant la.click()
méthode jQuery pour la «soumettre». vérifier ma réponseCela n'a rien à voir avec les paramètres du navigateur si vous essayez d'ouvrir un nouvel onglet à partir d'une fonction personnalisée.
Dans cette page, ouvrez une console JavaScript et tapez:
Et il essaiera d'ouvrir une fenêtre contextuelle quels que soient vos paramètres, car le «clic» provient d'une action personnalisée.
Afin de se comporter comme un véritable «clic de souris» sur un lien, vous devez suivre les conseils de @ spirinvladimir et vraiment le créer:
Voici un exemple complet (ne l'essayez pas sur jsFiddle ou des éditeurs en ligne similaires, car il ne vous permettra pas de rediriger vers des pages externes à partir de là):
la source
w = window.open("placeholder"); $.ajax(...ajax call that returns the url...) success (...w.location = data.url...)
selon theandystratton.com/2012/…la source
JQuery
JS
la source
Ou vous pouvez simplement créer un élément de lien et cliquer dessus ...
Cela ne devrait pas être bloqué par des bloqueurs de popups ... Avec un peu de chance.
la source
Il y a une réponse à cette question et ce n'est pas non.
Étape 1: créez un lien invisible:
<a id="yourId" href="yourlink.html" target="_blank" style="display: none;"></a>
Étape 2: cliquez sur ce lien par programme:
document.getElementById("yourId").click();
Voici! Fonctionne un charme pour moi.
la source
J'ai recherché beaucoup d'informations sur la façon d'ouvrir un nouvel onglet et de rester sur le même onglet. J'ai trouvé une petite astuce pour le faire. Supposons que vous ayez l'URL que vous devez ouvrir - newUrl et l'ancienne URL - currentUrl , sur laquelle vous devez rester après l'ouverture du nouvel onglet. Le code JS ressemblera à quelque chose comme ceci:
la source
Que diriez-vous de créer un
<a>
avec_blank
commetarget
valeur d'attribut et leurl
commehref
avec affichage de style: caché avec un élément enfant? Ajoutez ensuite au DOM, puis déclenchez l'événement click sur un élément enfant.MISE À JOUR
Ça ne marche pas. Le navigateur empêche le comportement par défaut. Il peut être déclenché par programme, mais il ne suit pas le comportement par défaut.
Vérifiez et voyez par vous-même: http://jsfiddle.net/4S4ET/
la source
L'ouverture d'un nouvel onglet à partir d'une extension Firefox (Mozilla) se présente comme suit:
la source
Cette méthode est similaire à la solution ci-dessus mais implémentée différemment
.social_icon -> une classe avec CSS
la source
Cela peut être un hack, mais dans Firefox si vous spécifiez un troisième paramètre, 'fullscreen = yes', il ouvre une nouvelle fenêtre.
Par exemple,
Il semble en fait remplacer les paramètres du navigateur.
la source
cela fonctionne pour moi, il suffit d'empêcher l'événement, d'ajouter l'URL à un,
<a>
tag
puis de déclencher l'événement de clic dessustag
.la source
L'
window.open(url)
URL s'ouvrira dans le nouvel onglet du navigateur. Au-dessous de l'alternative JSvoici un exemple de travail (les extraits de stackoverflow ne permettent pas d'ouvrir un nouvel onglet)
la source
Que ce soit pour ouvrir l'URL dans un nouvel onglet ou une nouvelle fenêtre, est en fait contrôlé par les préférences du navigateur de l'utilisateur. Il n'y a aucun moyen de le remplacer en JavaScript.
window.open()
se comporte différemment selon la façon dont il est utilisé. S'il est appelé comme résultat direct d'une action de l'utilisateur , disons un clic sur un bouton, cela devrait fonctionner correctement et ouvrir un nouvel onglet (ou fenêtre):Cependant, si vous essayez d' ouvrir un nouvel onglet à partir d'un rappel de demande AJAX , le navigateur le bloquera car il s'agissait d'une action directe de l'utilisateur.
Pour contourner le bloqueur de popup et ouvrir un nouvel onglet à partir d'un rappel, voici un petit hack :
la source
J'ai essayé de cette façon et cela semble bien fonctionner
J'ai trouvé beaucoup d'exemples de travail ici:
http://www.gtalbot.org/FirefoxSection/Popup/PopupAndFirefox.html#TestPopupControl
la source
Je vais être un peu d'accord avec la personne qui a écrit (paraphrasé ici): "Pour un lien dans une page Web existante, le navigateur ouvrira toujours le lien dans un nouvel onglet si la nouvelle page fait partie du même site Web que la page Web existante. " Pour moi, au moins, cette "règle générale" fonctionne dans Chrome, Firefox, Opera, IE, Safari, SeaMonkey et Konqueror.
Quoi qu'il en soit, il existe un moyen moins compliqué de profiter de ce que l'autre personne a présenté. En supposant que nous parlons de votre propre site Web ("thissite.com" ci-dessous), où vous voulez contrôler ce que fait le navigateur, puis, ci-dessous, vous voulez que "specialpage.htm" soit VIDE, sans HTML du tout ( fait gagner du temps lors de l'envoi de données depuis le serveur!).
la source
Si vous ne souhaitez ouvrir que les liens externes (liens qui pointent vers d'autres sites), ce bit de JavaScript / jQuery fonctionne bien:
la source
Le navigateur ouvrira toujours le lien dans un nouvel onglet si le lien se trouve sur le même domaine (sur le même site Web). Si le lien se trouve sur un autre domaine, il l'ouvrira dans un nouvel onglet / fenêtre, selon les paramètres du navigateur.
Donc, selon cela, nous pouvons utiliser:
Et ajoutez du code jQuery:
Donc, ouvrez d'abord une nouvelle fenêtre sur le même site Web avec la cible _blank (il l'ouvrira dans un nouvel onglet), puis ouvrez le site Web souhaité dans cette nouvelle fenêtre.
la source