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?
osx 10.4: safari 4.1, opera 10.1, firefox 3.5
można jeszcze zastosować coś takiego http://www.bennadel.com/blog/672-Passing-Data-From-A-Pop-Up-Window-To-A-Parent-Window-Using-ColdFusion-And-Javascript.htm
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
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:).
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.
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.
To nie mogłeś po prostu napisać "okolicznościach" ?
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?
Dla mnie to słowo to zbędny zamiennik/zapożyczenie z obcego do już istniejących słów.