Jak wykryć czy przeglądarka blokuje popup?
Opublikowany: 04.10.2011 12:05:31 | Komentarzy 2
W jednym z projektów dostałem zgłoszenie (błąd), że aplikacja się wysypuje. Jak się okazało, na załączonym screenie przez testera, problemem jest blokowanie wyskakujących okienek. Pojawiła się potrzeba, by sprawdzać ten "issue" i pokazać użytkownikowi odpowiednią informację.
Problem z pozoru wydaje się prosty. Na chłopski rozum, blokowanie okienek wygląda mniej więcej tak:
- Inicjuję otwarcie nowego okna.
- Przeglądarka je blokuje (zmienną z nowym oknej w jakiś sposób "czyści").
- Pojawia się informacja, że zostało zablokowane okienko.
Skoro tak, to poniższy kod powinien zadziałać bez problemu:
var okno = window.open("/plik.html", "nazwaOkna", "width=1200,height=600,scrollbars,resizable,menubar"); if (!okno) { window.alert("Przeglądarka blokuje okienka"); }
I wiecie co? Działa. Działa poprawnie w FF7 i IE8 :). Chrome i Opera poległy.
W tym momencie, wychodzą subtelne różnice między przeglądarkami.
Na szczęście, aby wykryć blokowanie okienek w Chromie i Operze trzeba posłużyć się sztuczką. W przypadku Chrome musimy sprawdzić czy rozmiar okna nie jest przypadkiem równy zeru. W Operze na sztuczka nie przejdzie. Tutaj trzeba inną zastosować - sprawdzamy czy np. któraś z właściwości nie istnieje.
Ostatniecznie, kod wygląda następująco:
var okno = window.open("/plik.html", "nazwaOkna", "width=1200,height=600,scrollbars,resizable,menubar"); if (!okno || okno.innerHeight === 0 || !okno.top) { window.alert("Przeglądarka blokuje okienka"); }
Komentarze
Dodaj komentarz