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?


Komentarze

dotnetomaniak.pl

14 czerwca 2011 07:10

Maciej Aniserowicz | Wykrycie blokady popupów w różnych przeglądarkach

Dziękujemy za publikację - Trackback z dotnetomaniak.pl

Kuba

14 czerwca 2011 08:57

osx 10.4:  safari 4.1, opera 10.1, firefox 3.5

można jeszcze zastosować coś takiego www.bennadel.com/.../...dFusion-And-Javascript.htm

marek

14 czerwca 2011 10:27

Witam,
ja osobiście nie pchałbym się w popup'y. Użyłbym np. jQueryUI modal dialog (http://jqueryui.com/demos/dialog/#modal) jeśli już trzeba.

Pozdrawiam,
Marek

procent

14 czerwca 2011 10:38

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:).

twk

16 czerwca 2011 20:02

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.

procent

16 czerwca 2011 20:22

twk,
"cyrkumstancja" to jak najbardziej polskie słowo, tyle że nietypowe ( http://sjp.pwn.pl/haslo.php?id=2554050 ).

Mi timeout też nie pasi, ale nie znalazłem innego sposobu na wykrycie tego w Chrome. Chętnie skorzystam jeśli posiadasz ładniejsze rozwiązanie tego problemu.

miodek

17 czerwca 2011 00:13

To nie mogłeś po prostu napisać "okolicznościach" ?

procent

17 czerwca 2011 12:00

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?

miodek

18 czerwca 2011 16:04

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

Komentarze zamknięte