6

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?

swilliams
  • 48,060
  • 27
  • 100
  • 130
Chris Conway
  • 16,269
  • 23
  • 96
  • 113
  • Alternative hacky way is to check for '[native code]' was suggested in https://stackoverflow.com/questions/26094333/detect-blocked-popups-without-opening-a-popup/31299484#31299484 – Michael Freidgeim Feb 20 '21 at 22:59

5 Answers5

8

Read Detect a popup blocker using Javascript:

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

Looks like this:

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()
T.J. Crowder
  • 1,031,962
  • 187
  • 1,923
  • 1,875
Andre Bossard
  • 6,191
  • 34
  • 52
  • 1
    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 Nov 12 '08 at 20:16
3

As others have said, you'll have to try 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");
Evan Hahn
  • 12,147
  • 9
  • 41
  • 59
Jonny Buchanan
  • 61,926
  • 17
  • 143
  • 150
2

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
  • 528,062
  • 107
  • 651
  • 834
1

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.

Codebeef
  • 43,508
  • 23
  • 86
  • 119
0

Popups that are opened in response to an action by a user—such as clicking a link—shouldn't be blocked by popup blockers.

John Topley
  • 113,588
  • 46
  • 195
  • 237
  • 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 Thomas Oct 08 '09 at 09:33