web-dev-qa-db-fra.com

Comment utiliser target dans location.href

Je développe actuellement une application Web sur laquelle je dois ouvrir une fenêtre contextuelle pour afficher un rapport. Le problème est que certaines versions d'Explorer ne prennent pas en charge la fonction javascript window.open. Par conséquent, lorsque c'est le cas, j'attrape l'erreur et ouvre la nouvelle URL avec location.href. Voici le code:

try {
    window.open(url, "","width=1002,height=700,location=0,menubar=0,scrollbars=1,status=1,resizable=0")
} catch(e) {
    location.target = "_blank";
    location.href = url;
}

Le problème est que location.target ne fonctionne pas et j'aimerais savoir s'il existe un moyen de spécifier la cible de location.href afin qu'il puisse être ouvert dans un nouvel onglet. 

16
user1084509

Le problème est que certaines versions d'Explorer ne prennent pas en charge la fonction javascript window.open

Tu peux répéter s'il te plait? Pouvez-vous fournir une référence pour cette déclaration? Avec égards, je pense que vous devez vous tromper. Cela fonctionne sur IE6 et IE9, par exemple.

La plupart des navigateurs modernes ne permettent pas à votre code d'utiliser window.open, sauf en réponse directe à un événement de l'utilisateur, afin de limiter les spams et autres messages indésirables. c'est peut-être ce à quoi vous pensez. Tant que vous utilisez uniquement window.open lorsque vous répondez à un événement utilisateur, vous devriez pouvoir utiliser window.open - avec toutes les versions de IE.

Il n'y a aucun moyen d'utiliser location pour ouvrir une nouvelle fenêtre. Juste window.open ou bien sûr, l'utilisateur clique sur un lien avec target="_blank".

12
T.J. Crowder

essayez celui-ci, qui simule un clic sur une ancre.

var a = document.createElement('a');
a.href='http://www.google.com';
a.target = '_blank';
document.body.appendChild(a);
a.click();
25
qiao

Si vous choisissez la solution de @qiao, vous voudrez peut-être supprimer l'enfant ajouté, car l'onglet reste ouvert et les clics ultérieurs ajouteront davantage d'éléments au DOM.

// Code by @qiao
var a = document.createElement('a')
a.href = 'http://www.google.com'
a.target = '_blank'
document.body.appendChild(a)
a.click()
// Added code
document.body.removeChild(a)

Peut-être que quelqu'un pourrait poster un commentaire sur son post, parce que je ne peux pas.

3
Milos

Vous pouvez essayer ceci:

        <script type="text/javascript">
         function newWindow(url){
                window.open(url);
            }
        </script>

Et appelez la fonction

3
bobbiloo

Si vous utilisez un <a/> pour déclencher le rapport, vous pouvez essayer cette approche. Au lieu d'essayer de générer une nouvelle fenêtre lorsque window.open() échoue, définissez le scénario par défaut pour ouvrir une nouvelle fenêtre via target (et empêchez-le si window.open() réussit).

HTML

<a href="http://my/url" target="_blank" id="myLink">Link</a>

JS

var spawn = function (e) {
    try {
        window.open(this.href, "","width=1002,height=700,location=0,menubar=0,scrollbars=1,status=1,resizable=0")
        e.preventDefault(); // Or: return false;
    } catch(e) {
    // Allow the default event handler to take place
    }
}

document.getElementById("myLink").onclick = spawn;
2
cheeken
<a href="url" target="_blank"> <input type="button" value="fake button" /> </a>
0
Paulo

À partir de 2014, vous pouvez déclencher le clic sur une balise <a/>. Cependant, pour des raisons de sécurité, vous devez le faire dans un gestionnaire d'événements click, sinon le navigateur le marquera comme une fenêtre contextuelle (certains autres événements peuvent vous permettre de déclencher l'ouverture en toute sécurité).

jsFiddle

0
Maël Nison

Pourquoi ne pas avoir une balise d'ancrage masquée sur la page avec la cible définie selon vos besoins, puis simuler en cliquant dessus lorsque vous avez besoin de la sortie?

Comment puis-je simuler un clic sur une balise d'ancrage?

Cela fonctionnerait dans les cas où le window.open ne fonctionnait pas

0
box86rowh