J'ai deux pages one.html et two.html
J'ouvre une nouvelle fenêtre en utilisant le code suivant
//here popup is a global variable
popup=window.open('two.html','two');
pour la première fois, une fenêtre contextuelle s'ouvre avec succès et obtient le focus, mais si j'essaie de l'ouvrir à nouveau sans fermer le popup déjà ouvert, alors two.html ne reçoit pas le focus pour la deuxième fois.
remarque: j'ai défini le nom de la fenêtre popup comme "deux"
vous pouvez obtenir en utilisant la fonction focus
utilisée ci-dessous
<script language="javascript" type="text/javascript">
<!--
function popitup(url) {
newwindow=window.open(url,'name','height=200,width=150');
if (window.focus) {newwindow.focus()}
if (!newwindow.closed) {newwindow.focus()}
return false;
}
// -->
</script>
focusedWindow = window.open('two.html','two').focus();
Ajouter directement le focus () au prototype window.open
Ma solution empirique qui fonctionne toujours:
setTimeout('detail.focus()', 1);
Ajouter .focus()
juste après l'ouverture ne fonctionne pas toujours, ni appeler une .focus()
sans setTimeout.
Je sais que c'est moche (je voulais m'en débarrasser maintenant, après quelques années, sans succès), et je ne sais pas pourquoi ni comment, mais cela fonctionne.
var win = window.open('two.html','two');
win.document.getElementsByTagName("body")[0].focus(); //focus the body rather than the window.
Vérifiez vos paramètres Firefox 2 à
Si le paramètre "Augmenter ou diminuer les fenêtres" est désactivé, alors Désactive la méthode window.focus ()
Vous pouvez fermer le popup avant de l'ouvrir si vous vérifiez si le popup est déjà ouvert lorsque vous appelez la fonction.
var popup;
function openPop() {
if ("close" in popup) popup.close();
popup = window.open("http://stackoverflow.com", "test", "width=200, height=200");
}
Cela garantira que le popup apparaisse toujours en haut.
J'ai trouvé une réponse pour moi qui fonctionne. Dans le code HTML du corps de la popup, ajoutez à la balise body onload = "this.window.focus ()". Même si vous réduisez la fenêtre, elle apparaît de nouveau au centre. Assurez-vous de nommer la fenêtre dans votre script d'exécution window.open ('url', 'un nom', 'vars'); J'espère que cela vous aide!
setTimeout(function () {
window.open('PageName', '', 'height=560,width=1120,resizable=no,left=100,top=50,screenX=100,screenY=50');
}, 100);
-> Ce code est utilisé pour donner le focus à la fenêtre nouvellement ouverte .-> Mettez-le en javascript. ('SetTimeout est une fonction intégrée du javascript') -> Il arrive souvent que, lorsque la fenêtre contextuelle est ouverte, va derrière la vieille fenêtre, donc ci-dessus est très utile pour se concentrer pour une nouvelle fenêtre.
C'est une solution one-liner, utilisez focus sur votre var pop up:
popup=window.open('two.html','two');
popup.focus();
Cela ouvrira toujours votre fenêtre pop-up même si elle n'est pas fermée.
Malheureusement, certains navigateurs modernes ne supportent toujours pas les onglets de focalisation, voir cette entrée de bogue Firefox , par exemple.
Cependant, le code suivant fonctionne bien pour moi. En guise de solution de contournement, il rouvre une fenêtre/un onglet s'il ne peut pas être centré:
var win = window.open("two.html", "two")
win.focus();
setTimeout(function() {
if(document.hasFocus()) {
win.close();
window.open("two.html", "two")
}
}, 1);
Dans la première ligne, il ouvre la fenêtre et tente de la focaliser à l'aide de la deuxième ligne. Si une fenêtre avec le nom two
est déjà présente, aucune nouvelle fenêtre/onglet n'est ouvert, mais il est réutilisé.
Le truc, c’est que nous vérifions si la fenêtre actuelle a toujours le focus en utilisant document.hasFocus()
. Si tel est le cas, nous fermons la fenêtre et la rouvrons. Ceci est uniquement destiné aux navigateurs qui ne supportent pas la focalisation de l'onglet qui doit être réutilisé directement. C'est actuellement le cas pour FF et IE/MS Edge. Chrome fonctionne bien.
Cependant, directement après l'utilisation de window.open
, document.hasFocus()
renvoie toujours la valeur true (ainsi, dans Chrome également). La solution de contournement consiste à utiliser setTimeout
une ms plus tard.