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.
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"
.
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();
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.
Vous pouvez essayer ceci:
<script type="text/javascript">
function newWindow(url){
window.open(url);
}
</script>
Et appelez la fonction
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;
<a href="url" target="_blank"> <input type="button" value="fake button" /> </a>
À 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é).
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