views:

641

answers:

5

Is there a good way to determine if a person has a popup blocker enabled? I need to maintain a web application that unfortunately has tons of popups throughout it and I need to check if the user has popup blockers enabled.

The only way I've found to do this is to open a window from javascript, check to see if it's open to determine if a blocker is enabled and then close it right away.

This is slightly annoying since users who do not have it enabled see a small flash on the screen as the window opens and closes right away.

Are there any other non-obtrusive methods for accomplishing this?

+1  A: 

I don't think there is any way of detecting this without attempting to open a window, as popup blockers don't add anything that can be interrogated in JS.

Mr. Matt
+6  A: 

Read Detect a popup blocker using Javascript:

Basically you check if the 'window.open' method returns a handler to a newly opened window.

Looks like this:

<script type="text/JavaScript" language="JavaScript">
 var mine = window.open('','','width=1,height=1,left=0,top=0,scrollbars=no');
 if(mine)
    var popUpsBlocked = false
 else
    var popUpsBlocked = true
 mine.close()
</script>
Andre Bossard
This is very similar to what I have already. I was looking for a more unobtrusive method, though I guess that's not possible.
Chris Conway
+2  A: 

As others have commented, the only way to find out for sure is to try it.

However, a good approximate answer to the question “is a popup-blocker installed” is, these days, “yes”. All recent browsers will block your pop-ups by default, so you'd better design your app to cope gracefully with this. Namely, don't try to window.open except in reaction to a user interaction (typically onclick), and you'll be fine.

bobince
A: 
John Topley
I can understand why the author wants to do this. In our application, by the time the user has initiated an action requiring a separate window, they've typed in quite a bit of data. If the pop-up blocker is active, then the user chooses to allow the new window, the browser typically refreshes the window the original app is on too, meaning their data gets lost as our Flex/Flash app is reloaded.
Jaymie
+3  A: 

As others have said, you'll have to suck it and see, but checking for the resulting window object being non-"falsy" isn't sufficient for all browsers.

Opera still returns a Window object when a popup is blocked, so you have to examine the object sufficiently to determine if it's a real window:

var popup = window.open(/* ... */);
var popupBlocked = (!popup || typeof popup.document.getElementById == "undefined");
insin