2013-06-21 6 views
7

Jak ustawić fokus w oknie nadrzędnym, gdy znajduje się na innej karcie przeglądarki? Próbowałem:Jak ustawić fokus na oknach podrzędnych i otwieranych, gdy jest tabulowany

window.opener.focus(); 

bezskutecznie. Wydaje się działać tylko wtedy, gdy okna nie są zadokowane.

Potrzebuję tego do pracy w Chrome, IE9/10, Firefox i Safari.

Wygląda na to, że Internet Explorer ma problemy z ustawieniem fokusu na okno podrzędne. Na przykład. przy użyciu:

var windowRef = window.open(url); 

później z tej samej zakładce:

windowRef.focus(); // ok in Chrome, doesn't seem to work in IE... 

Odpowiedz

0

Co dokładnie chcesz osiągnąć? Aby ustawić fokus wewnątrz innego okna na link/przycisk/pole formularza/cokolwiek? Lub, aby inne okno (zakładka przeglądarki) było aktywną zakładką przeglądarki?

W każdym razie może połączenie opener.focus() nie działa, ponieważ oba okna nie są obsługiwane z tego samego źródła. Spróbuj skonfigurować kanał komunikacyjny za pomocą postMessage, aby rozwiązać ten problem. Tak więc w dokumencie opener, słuchać na imprezy jak ta:

window.addEventListener('message', function (event) { 
    window.focus(); 
}, false); 

iw otwartym oknie, wysłać wiadomość tak:

opener.postMessage('foo', '*'); 

Niestety, nie mogę sprawdzić, czy to działa teraz. (Myślę, że powinien, chociaż ...)

Kilka rzeczy dodać, choć:

  1. Niektóre przeglądarki spuścizna bzdura nie obsługują postMessage (patrz caniuse.com). Istnieją jednak rozwiązania tymczasowe. :)
  2. Użyłem standardowej notacji W3 do dołączenia detektora zdarzeń. IE8 i poniżej używają ich zastrzeżonego odpowiednika w wersji attachEvent.
  3. Należy zastąpić wieloznacznik początkowy '*' faktycznym źródłem okna otwieracza.
  4. W funkcji nasłuchiwania zdarzeń wiadomości należy sprawdzić właściwość event.origin i uruchomić tylko rzeczywistą treść, jeśli punkt początkowy jest poprawny.
+0

Dzięki defaude, dam to odchodzenie i poinformować – magritte

+0

Niestety, to nie działa albo :(. - Tak, moim zamiarem jest, aby karta Inne przeglądarce kartę aktywną – magritte

+0

Hmm, zbyt Jeśli znajdę czas, sprawdzę to i prawdopodobnie znajdę dla ciebie rozwiązanie :) – defaude