Wydaje się, że nowoczesne przeglądarki nie pozwalają na window.focus
istniejącego okna. A przynajmniej nie da ostrości okna. (IE9 zacznie migotać kartę, ale większość innych przeglądarek jedynie ją wczytuje, ale nic nie wskazuje, aby zwrócić uwagę użytkownika na nowe okno).
Dlatego jednym z rozwiązań, które się przedstawia, jest najpierw zamknięcie okna, a następnie ponownie otwórz go natychmiast po. Na przykład, declare the following function:
window.openOrFocus = function(url, name) {
if (!window.popups)
window.popups = {};
if (window.popups[name])
window.popups[name].close();
window.popups[name] = window.open(url, name);
}
Teraz można napisać kod HTML, takich jak to:
<a href="javascript:void(0);" onclick="openOrFocus('http://jsfiddle.net/k3t6x/2/', 'window1')">Window 1</a><br />
<a href="javascript:void(0);" onclick="openOrFocus('http://jsfiddle.net/KR6w3/1/', 'window2')">Window 2</a><br />
Ponieważ zamyka okno po pierwsze, to niezawodnie daje ostrość do nowo utworzonego okna potomnego.
To rozwiązanie również używa nazw window.popups
, więc zmiana nazwy zwyczaje, które w próbce javascript jeśli masz funkcję o nazwie popups
lub w inny sposób zderzył się z nim.
Zastrzeżenie: To nie działa po odesłaniu. Dzieje się tak dlatego, że po przejściu z bieżącej strony nie jest ona już właścicielem okien podrzędnych. Dlatego nie może ich już zamykać. Jednak po prostu pogarsza się do zwykłego (nie koncentrując się) zachowanie przy użyciu atrybutu target
.
testowane w: Firefox 4, Chrome 11, IE 9
JsFiddle Demo:http://jsfiddle.net/aqxBy/7/
Okno się ładuje, ale nie wyświetla się? Czy ładowanie prawidłowej strony? Czy ma to samo zachowanie w każdej przeglądarce? Myślę, że to jest problem dotyczący menedżera okien, a nie coś, co można zrobić z javascriptu, ale teraz mam na to ochotę, chcę pójść dalej. – jcolebrand