Wykrycie blokady popupów w różnych przeglądarkach

8

Aplikacja, którą tworzę, w pewnych cyrkumstancjach wymaga odblokowanych popupów. Postępowanie nasuwa się samo – trzeba wykryć czy popupy są odblokowane i pokazać jakieś ostrzeżenie, jeśli nie są. Myślałem, że będzie to kwadrans roboty…

No i faktycznie byłby to kwadrans, jeśli nie odpaliłbym więcej niż jednej przeglądarki. Jak to w świecie webdev bywa, to samo raz działa tak, a raz srak, w zależności od tego co jest naszym oknem na świat.

Poniżej efekt ponad dwóch godzin prób i błędów, który (jak mi się wydaje) działa w IE, FF, Chrome i Operze:

  1:  function detectPopupsPermission() {
  2:      var popup = window.open('about:blank', '', 'directories=no,height=10,width=10,menubar=no,resizable=no,scrollbars=no,status=no,titlebar=no,location=no');
  3:  
  4:      /* IE & FF */
  5:      if (!popup) {
  6:          popupsBlocked();
  7:      }
  8:      /* Opera */
  9:      else if (/opera/i.test(navigator.userAgent) && !popup.outerWidth) {
 10:          popupsBlocked();
 11:      }
 12:      /* Chrome */
 13:      else if (/chrome/i.test(navigator.userAgent)) {
 14:          // chrome sets outerWidth after some time, not immediately
 15:          setTimeout(function() {
 16:              if (popup.outerWidth === 0) {
 17:                  popupsBlocked();
 18:              } else {
 19:                  popupsAllowed();
 20:              }
 21:          }, 100);
 22:      }
 23:      else {
 24:          popupsAllowed();
 25:      }
 26:  };

Sugestie, opinie?

Share.

About Author

Programista, trener, prelegent, pasjonat, blogger. Autor podcasta programistycznego: DevTalk.pl. Jeden z liderów Białostockiej Grupy .NET i współorganizator konferencji Programistok. Od 2008 Microsoft MVP w kategorii .NET. Więcej informacji znajdziesz na stronie O autorze. Napisz do mnie ze strony Kontakt. Dodatkowo: Twitter, Facebook, YouTube.

8 Comments

  1. marek,
    To prawda, w miarę możliwości popupów dobrze jest unikać. Ale wymaganie "treść może być wyświetlona jako ‘modal dialog’ LUB jako zewnętrzny popup, w zależności od preferencji użytkownika" to pozostawia raczej niewielkie pole manewru:).

  2. No jak dla mnie to przegiąłeś stylistycznie z "w pewnych cyrkumstancjach". Włos mi się zjeżył. To tak jakbyś użył w podanym kodzie if…then…goto

    To samo komentatorzy sportowi: golkiper drużyny x…. kurcze no to przecież bramkarz jest, zwykły bramkarz, jest takie słowo, funkcjonuje i nie razi.

    Co do merytoryki kodu… jakoś nie pasi mi ten timeout dla Chrome.

  3. miodek,
    Mogłem. Mogłem też cały post napisać w języku staro-cerkiewno-słowiańskim. Ale chyba w tym jednym kątku internetu mam prawo pisać jak mi się podoba, nawet jeśli wyglądać to będzie dziwacznie?

  4. Dla mnie to słowo to zbędny zamiennik/zapożyczenie z obcego do już istniejących słów.

Newsletter devstyle!
Dołącz do 2000 programistów!
  Zero spamu. Tylko ciekawe treści.
Dzięki za zaufanie!
Do przeczytania wkrótce!
Niech DEV będzie z Tobą!