Comment utiliser target in location.href

Je développe actuellement une application Web où j'ai besoin d'ouvrir une fenêtre contextuelle pour afficher un rapport. Le problème est que certaines versions de l'explorateur ne prennent pas en charge la fonction window.open javascript, alors, lorsque c'est le cas, je capture l'erreur et j'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 la location.target ne fonctionne pas et j'aimerais savoir s'il existe un moyen de spécifier la cible de l'emplacement.href afin qu'il puisse être ouvert dans un nouvel onglet.

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

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

La plupart des navigateurs modernes ne permettront pas à votre code d'utiliser window.open sauf en réponse directe à un événement utilisateur, afin de conserver les pop-ups de spam et à distance; C'est peut-être ce que vous pensez. Tant que vous n'utilisez que window.open lors de la réponse à un événement utilisateur, vous devriez bien utiliser window.open – avec toutes les versions d'IE.

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

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(); 

Vous pouvez l'utiliser sur n'importe quel élément sur lequel onclick fonctionne:

onclick="window.open('some.htm','_blank');"

Vous pourriez essayer ceci:

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

Et appeler la fonction

Si vous parvenez à la solution par @qiao, vous voudrez peut-être supprimer l'enfant ajouté car l'onglet reste ouvert et les clics suivants ajouteraient plus 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 à sa publication, parce que je ne peux pas.

Si vous utilisez un <a/> pour déclencher le rapport, vous pouvez essayer cette approche. Au lieu de tenter de générer une nouvelle fenêtre lorsque window.open() échoue, faites le scénario par défaut pour ouvrir une nouvelle fenêtre via la target (et l'empêcher 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; 

Pourquoi ne pas avoir une étiquette d'ancrage cachée sur la page avec la cible définie comme vous avez besoin, puis simuler en cliquant dessus quand vous avez besoin de sortir?

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

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

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

JsFiddle

 <a href="url" target="_blank"> <input type="button" value="fake button" /> </a>