2010-06-03 16 views
12

Mam dwie strony one.html i two.htmlustawić ostrość oknie popup każdym razem

ja otwarcie nowego okna za pomocą następującego kodu

//here popup is a global variable 
popup=window.open('two.html','two'); 

po raz pierwszy okienko Otwórz się pomyślnie i skup się, ale jeśli spróbuję otworzyć go ponownie bez zamykania już otwartego wyskakującego okienka, to two.html po raz drugi się nie skupi.

uwaga: mam ustawić nazwę Okno podręczne jako „dwa”

+0

Nie jestem pewien, czy można to zrobić. Co powiesz na otwarcie nowego okna? –

+1

Chcę tylko otworzyć nowe okno tylko raz, nie za każdym razem, gdy – hunt

+1

akceptuje ans, jeśli to działa dla ciebie –

Odpowiedz

9

można achive za pomocą focus funkcję stosowane poniżej

<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> 
+0

znacznie powyżej kodu działa tylko w IE, ale teraz w firefox 3.6 – hunt

+0

@hunt: ani Google Chrome. Skoncentrowanie okna w ten sposób nie jest kompatybilne z przeglądarkami. –

+1

Cóż, jest to "zgodne", że nic nie zaszkodzi, ale Firefox, Chrome i Safari nie wykonają tej prośby. Firefox może być skonfigurowany przez jego użytkownika, aby zezwolić na takie polecenia 'focus()', ale myślę, że Chrome i Safari zawsze go ignorują. Nie ma sposobu, aby zmusić te przeglądarki do zwrócenia uwagi. (W rzeczywistości Safari jest * naprawdę * poważnie o tym: http://whatsthepointy.blogspot.com) – Pointy

1

Można zamknąć okienko przed jego otwarciem, jeśli sprawdzi zobacz, czy wyskakujące okienko jest już otwarte po wywołaniu funkcji.

var popup; 
​function openPop() { 
    if ("close" in popup) popup.close(); 
    popup = window.open("http://stackoverflow.com", "test", "width=200, height=200");​​​​​​​​ 
} 

Zapewni to, że popup pojawi się zawsze na górze.

+0

dobrze ten kod zamknie moje poprzednio otwarte okno i otworzy je innym. nie chcę zamykać mojego poprzedniego okna – hunt

+0

@hunt: Tak jak powiedziałem w swoim komentarzu na temat [odpowiedź pranay_stacker] (http://stackoverflow.com/questions/2965754/set-the-focus-of-a-popup- window-everytime/2965817 # 2965817), metoda fokusa nie będzie działać w przeglądarce dla okien podręcznych. Jestem prawie pewien, że nie ma innego sposobu na ponowne ustawienie okna. –

8
focusedWindow = window.open('two.html','two').focus(); 

Bezpośrednio dołączyć ostrość() do window.open protoype

+0

Proste rozwiązanie ... TO WORKSSS – ELAYARAJA

+0

Nie pracuję na safari w iPhonie – Zohaib

+0

Nie działa również w Edge i Firefox. – sibbl

1

Sprawdź ustawienia Firefoksa 2 w

  1. Przejdź do Narzędzia -> Opcje -> Treść
  2. Upewnij " Włącz JavaScript "jest włączony.
  3. Obok "Włącz JavaScript" kliknij przycisk "Zaawansowane".
  4. Upewnij się, że tam jest check-mark w polu [x] podnieść lub obniżyć okna

Jeśli ustawienie „podnieść lub obniżyć okna” jest wyłączony, a następnie ten wyłącza window.focus() metoda.

2
var win = window.open('two.html','two'); 
win.document.getElementsByTagName("body")[0].focus(); //focus the body rather than the window. 
+0

To podejście sprawdzało się w przypadku Chrome48, FF42 i IE11. – Doug

+0

Nie działa dla mnie. Otwiera "two.html" na mojej pierwszej zakładce, gdzie nazywam ten kod. I tak, zmieniłem nazwę var 'window'. Mógłbym naprawić to zachowanie, wywołując drugą linię nieco później za pomocą setTimeout, ale potem nie skupiłem ciała w to znaczy Edge. – sibbl

6

Moje rozwiązanie empiryczne, że zawsze działa:

setTimeout('detail.focus()', 1); 

Dołączanie .focus() zaraz po otwarte nie zawsze działa, ani wywoływania .focus() bez setTimeout.

Wiem, że to brzydkie (chciałem się go pozbyć teraz, po kilku latach, bez powodzenia), i nie znam dokładnych powodów, dlaczego i jak, ale to działa.

+0

Naprawiłem problem z firefox wykonując setTimeout (function() {window.open (...)}, 1) –

+0

jak rozumiem, setTimeout wywoła jego skrypt po wykonaniu ostatniego wiersza bieżącego skryptu, ale nie będzie działać w skryptach multythreading, ponieważ skrypt czasu będzie działał na czas ... –

0
setTimeout(function() { 
    window.open('PageName', '', 'height=560,width=1120,resizable=no,left=100,top=50,screenX=100,screenY=50'); 
}, 100); 

-> Ten kod służy do ustawiania ostrości w nowo otwartym oknie. -> Umieść go w javascript. ('SetTimeout jest wbudowaną funkcją javascript') -> Wiele czasu zdarza się, że gdy okno podręczne zostanie otwarte, przejdzie ono za stare okno, więc wyżej jest bardzo przydatne, aby skupić się na nowym oknie.

+1

Witamy w Stack Przelewowy! Zamiast wysyłać blok kodu, wyjaśnij, dlaczego ten kod rozwiązuje postawiony problem. Bez wyjaśnienia, to nie jest odpowiedź. – Artemix

0

Jest to jedno rozwiązanie liniowej, stosowanie skupić się na pop-up var:

popup=window.open('two.html','two'); 
popup.focus(); 

To zawsze będzie otworzyć okno pop-up, nawet jeśli nie jest zamknięta.

0

Znalazłem odpowiedź dla siebie, która działa. W html wyskakującego tekstu dodaj do tagu body onload = "this.window.focus()". Nawet jeśli zminimalizujesz okno, wyskakuje z powrotem do przodu i do środka. Upewnij się i nazwij okno skryptu wykonywania window.open ('url', 'some name', 'vars'); Mam nadzieję, że to pomoże!

0

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.

Powiązane problemy