Malheureusement, certains navigateurs modernes ne prennent toujours pas en charge les onglets de focalisation, voir this Firefox bug entry, par exemple.
Cependant, le code suivant fonctionne bien pour moi. Pour contourner ce problème, il rouvre une fenêtre/onglet si elle ne peut pas être concentré:
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 se concentrer à l'aide de la deuxième ligne. Si une fenêtre portant le nom two
est déjà présente, aucune nouvelle fenêtre/aucun onglet n'est ouvert, mais il est réutilisé.
L'astuce est maintenant, que nous vérifions si la fenêtre en cours a encore le focus en utilisant document.hasFocus()
. Si c'est le cas, nous fermons la fenêtre et la rouvrons. Ceci est uniquement pour les navigateurs qui ne supportent pas la mise au point de l'onglet qui doit être réutilisé directement. Actuellement, c'est le cas pour FF et IE/MS Edge. Chrome fonctionne bien.
Toutefois, directement après l'utilisation de window.open
, document.hasFocus()
renvoie toujours la valeur true (donc, également dans Chrome). La solution de contournement consiste à utiliser setTimeout
une ms plus tard.
Je ne suis pas sûr que cela soit possible. Pourquoi ne pas ouvrir une nouvelle fenêtre? –
je veux juste ouvrir une nouvelle fenêtre une seule fois, pas à chaque fois – hunt
accepter les ans si cela fonctionne pour vous –