Logo

Blog o JavaScript, jQuery, HTML5, CSS3 i 4. Porady jak pisać dobrej jakości kod, tutoriale, nowości.

Jak wykryć czy przeglądarka blokuje popup?

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:

  1. Inicjuję otwarcie nowego okna.
  2. Przeglądarka je blokuje (zmienną z nowym oknej w jakiś sposób "czyści").
  3. 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");
}
Autor wpisu

Piotr cichosz (shpyo) — Front-end developer Twórca kilku serwisów internetowych oraz autor kilku blogów. Pasjonat nowych, otwartych technologii.

Komentarze

Gavatar Ender

04.10.2011 Ender

Uuu, nie wiedziałem, że aż tak trzeba kombinować, żeby zwykłe zablokowanie okienka rozpoznać.

Gavatar rexty

10.10.2011 rexty

Ten sposób może się przydać. Na szczęście używam FF więc obędzie się bez zbędnych kombinacji.

Gavatar Promo

13.03.2016 Promo

Dzięki :) Przyda się ta metoda do nowej stronki w której mam przymus wyświetlać produkty w popup. W razie blokady będzie trzeba się pomęczyć i na warstwie wyświetlać albo w nowym oknie.

Dodaj komentarz