Niestety niektóre współczesne przeglądarki nadal nie obsługują kart skupienia, patrz np. this Firefox bug entry.
Jednak poniższy kod działa dobrze dla mnie. Jako obejście, to ponownie otwiera się okno/kartę, jeśli nie mogą być skoncentrowany:
var win = window.open("two.html", "two")
win.focus();
setTimeout(function() {
if(document.hasFocus()) {
win.close();
window.open("two.html", "two")
}
}, 1);
W pierwszym wierszu to otwiera okno i próbuje skupić się go za drugą linię. Jeśli okno o nazwie two
już tam jest, nowe okno/karta nie jest otwierane, ale jest ponownie używane.
Sztuką jest, że sprawdzamy, czy bieżące okno nadal ma fokus przy użyciu document.hasFocus()
. Jeśli tak, zamykamy okno i ponownie je otwieramy. Dotyczy to tylko przeglądarek, które nie obsługują ustawiania ostrości na karcie, która ma być ponownie używana bezpośrednio. Obecnie dotyczy to FF i IE/MS Edge. Chrome działa dobrze.
Jednak bezpośrednio po użyciu window.open
, document.hasFocus()
zawsze zwraca true (tak, powiedział, również w Chrome). Sposób obejścia tego problemu polega na tym, aby użyć setTimeout
jeden ms później.
Nie jestem pewien, czy można to zrobić. Co powiesz na otwarcie nowego okna? –
Chcę tylko otworzyć nowe okno tylko raz, nie za każdym razem, gdy – hunt
akceptuje ans, jeśli to działa dla ciebie –