2009-12-03 15 views
6

Piszę aplikację internetową, która wykonuje akcję co minutę, która (bardzo krótko) zawiesza przeglądarkę. Chciałbym wstrzymać tę akcję, gdy karta wyświetlająca aplikację webapp nie jest wyświetlana, aby zminimalizować irytację. Czy jest jakiś sposób, aby to zrobić za pomocą JavaScript, w najnowszej wersji Firefoksa?Wykrywanie widoczności karty w przeglądarce Firefox

Edit: w celu wyjaśnienia, pytam się, jak określić widoczność zakładce że niektóre kod JS jest uruchomiony w - nie sposób, aby wstrzymać/wznowić działanie, które zawiesza przeglądarkę.

Odpowiedz

7
var isFocused = true; 

window.onblur=function(){ 
    if(isFocused==true){ 
    isFocused=false; 
    } 
} 

window.onfocus = function(){ 
    isFocused = true; 
} 

teraz, że działanie wykonać, co minutę lub dwie, to zrobić tylko wtedy, gdy isFocused jest prawdą. Wtedy skupia się zakładka strony/aplikacji internetowej.

+0

dlaczego warto sprawdzić if (isFocused == true)? –

+0

Używałem alertu podczas debugowania, kiedy się pojawił, wystrzelił również rozmycie i był to całkowity bałagan: D. Ponadto Firefox nie rozpoznaje i nie powiadamia javascript o przełączaniu kart w czasie rzeczywistym bardzo dokładnie. (Wiem z doświadczenia tworzenia dodatków). Czasami zdarza się, że te zdarzenia wystrzeliwują dwa razy itd. ... W zależności od kodu może to być nieszkodliwe lub całkowicie Cię zepsuć. Tak, po prostu upewniam się, że ustawiłeś zmienną na "nieostrość" tylko wtedy, gdy jest teraz skupiona. Po co zmieniać go na "nieostry", gdy jest już "nieostry"? Zdobądź to, co mówię? –

+0

Rozumiem. Ale instrukcja if ma sens tylko wtedy, gdy faktycznie robisz coś w środku (coś, co spowodowałoby twoją stronę, gdybyś zrobił to dwa razy z rzędu). W tym konkretnym przypadku jest całkowicie zbędny, ponieważ nie ma znaczenia, czy zmienna zostanie ustawiona dwukrotnie na tę samą wartość ... –

2

nie testowano, ale jak o tym:

window.onblur() = function() { ... pause your script here }

ja nie wiem, czy Firefox obsługuje rozmycia okien w zakładkach jako oddzielnych oknach.

+0

Właśnie próbowałem tego i działa (zwróć uwagę, że użyłem jQuery do dołączenia obsługi zdarzeń do onblur). –

+0

Oprócz faktu, że 'onblur()' powinien po prostu być 'onblur', myślę, że to może działać. Jednak naprawdę chciałbym móc sprawdzić, czy obecnie okno jest aktywne, czy nie. –

1

Wydaje mi się, że będziesz musiał zrobić to za pomocą zdarzenia window.onblur, ponieważ dostęp do okna przeglądarki ze skryptu na stronie internetowej jest zabroniony ze względów bezpieczeństwa (dozwolone tylko w przypadku skryptów uprzywilejowanych).

Co chcesz zrobić (uzyskać dostęp do okna przeglądarki z okna podrzędnego lub strony internetowej) jest opisane w Mozilla Developer Center, ale wspomina się tam, że tylko uprzywilejowany skrypt może to zrobić, a prawdopodobnie dostaniesz " Błąd odmowy odbioru podczas próby.

Powiązane problemy