К сожалению, некоторые современные браузеры все еще не поддерживают фокусировочные вкладки, см., Например, эту запись об ошибке Firefox .
Однако следующий код работает хорошо для меня. В качестве обходного пути он открывает окно / вкладку, если на него нельзя сфокусироваться:
var win = window.open("two.html", "two")
win.focus();
setTimeout(function() {
if(document.hasFocus()) {
win.close();
window.open("two.html", "two")
}
}, 1);
В первой строке он открывает окно и пытается сфокусировать его, используя вторую строку. Если окно с именем two
уже существует, новое окно / вкладка не открывается, но оно используется повторно.
Хитрость в том, что мы проверяем, имеет ли текущее окно фокус, используя document.hasFocus()
. Если это так, мы закрываем окно и снова его открываем. Это только для браузеров, которые не поддерживают фокусировку вкладки, которую нужно использовать напрямую. В настоящее время это касается FF и IE / MS Edge. Хром хорошо работает.
Однако непосредственно после использования window.open
, document.hasFocus()
всегда возвращает true (так сказать, также в Chrome). Обходной путь должен использовать setTimeout
одну мс позже.