Rilevamento popup prima dell'accesso dell'utente
-
05-07-2019 - |
Domanda
C'è un buon modo per determinare se una persona ha un blocco popup abilitato? Devo mantenere un'applicazione Web che purtroppo ha tonnellate di popup in tutto e devo verificare se l'utente ha i blocchi popup abilitati.
L'unico modo in cui ho scoperto di farlo è aprire una finestra da JavaScript, verificare se è aperta per determinare se un blocco è abilitato e quindi chiuderlo immediatamente.
Questo è leggermente fastidioso poiché gli utenti che non lo hanno abilitato vedono un piccolo lampo sullo schermo mentre la finestra si apre e si chiude immediatamente.
Esistono altri metodi non invadenti per raggiungere questo obiettivo?
Soluzione
Leggi Rileva un blocco popup usando Javascript :
Fondamentalmente si controlla se il metodo 'window.open' restituisce un handle a una finestra appena aperta.
Assomiglia a questo:
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()
Altri suggerimenti
Come altri hanno già detto, dovrai provarlo e vedere, ma verificando che l'oggetto della finestra risultante sia non "errato". non è sufficiente per tutti i browser.
Opera restituisce comunque un oggetto Window
quando un popup è bloccato, quindi è necessario esaminare l'oggetto sufficientemente per determinare se si tratta di una finestra reale:
var popup = window.open(/* ... */);
var popupBlocked = (!popup || typeof popup.document.getElementById == "undefined");
Come altri hanno commentato, l'unico modo per scoprirlo con certezza è provarlo.
Tuttavia, una buona risposta approssimativa alla domanda & # 8220; è un blocco popup installato & # 8221; è, in questi giorni, & # 8220; sì & # 8221 ;. Tutti i browser recenti bloccheranno i tuoi popup per impostazione predefinita, quindi è meglio progettare la tua app per far fronte con grazia a questo. Vale a dire, non provare a window.open se non in risposta a un'interazione dell'utente (in genere onclick), e andrà tutto bene.
Non credo che ci sia modo di rilevarlo senza tentare di aprire una finestra, poiché i blocchi popup non aggiungono nulla che possa essere interrogato in JS.
I popup che vengono aperti in risposta a un'azione di un utente & # 8212; come fare clic su un link & # 8212; non devono essere bloccati dai blocchi popup.