Comment puis-je détecter si un navigateur bloque une fenêtre contextuelle?

voix
88

De temps en temps, je suis tombé sur une page Web qui tente de pop ouvrir une nouvelle fenêtre (pour l'entrée de l'utilisateur, ou quelque chose d'important), mais le bloqueur de pop-up empêche que cela se produise.

Quelles méthodes peut appeler la fenêtre utiliser pour vous assurer que la nouvelle fenêtre lancée correctement?

Créé 05/08/2008 à 23:01
source utilisateur
Dans d'autres langues...                            


6 réponses

voix
109

Si vous utilisez JavaScript pour ouvrir le menu contextuel, vous pouvez utiliser quelque chose comme ceci:

var newWin = window.open(url);             

if(!newWin || newWin.closed || typeof newWin.closed=='undefined') 
{ 
    //POPUP BLOCKED
}
Créé 05/08/2008 à 23:03
source utilisateur

voix
30

J'ai essayé plusieurs des exemples ci-dessus, mais je ne pouvais pas les amener à travailler avec Chrome. Cette approche simple semble fonctionner avec Chrome 39, Firefox 34, Safari 5.1.7 et IE 11. Voici l'extrait de code de notre bibliothèque JS.

openPopUp: function(urlToOpen) {
    var popup_window=window.open(urlToOpen,"myWindow","toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, copyhistory=yes, width=400, height=400");            
    try {
        popup_window.focus();   
    } catch (e) {
        alert("Pop-up Blocker is enabled! Please add this site to your exception list.");
    }
}
Créé 31/12/2014 à 19:16
source utilisateur

voix
24

Cette solution pour le contrôle de bloqueur de pop-up a été testé dans FF (v11), Safari (v6), Chrome (v23.0.127.95) et IE (v7 et v9). Mettre à jour la fonction _displayError pour gérer le message d'erreur comme bon vous semble.

var popupBlockerChecker = {
    check: function(popup_window){
        var _scope = this;
        if (popup_window) {
            if(/chrome/.test(navigator.userAgent.toLowerCase())){
                setTimeout(function () {
                    _scope._is_popup_blocked(_scope, popup_window);
                },200);
            }else{
                popup_window.onload = function () {
                    _scope._is_popup_blocked(_scope, popup_window);
                };
            }
        } else {
            _scope._displayError();
        }
    },
    _is_popup_blocked: function(scope, popup_window){
        if ((popup_window.innerHeight > 0)==false){ 
            scope._displayError();
        }
    },
    _displayError: function(){
       alert("Popup Blocker is enabled! Please add this site to your exception list.");
    }
};

Usage:

var popup = window.open("http://www.google.ca", '_blank');
popupBlockerChecker.check(popup);

J'espère que cela t'aides! :)

Créé 30/11/2012 à 21:39
source utilisateur

voix
10

Une « solution » qui toujours travailler indépendamment de la société de navigateur ou la version est de simplement mettre un message d'avertissement sur l'écran, quelque part près de la commande qui va créer un pop-up, qui met en garde contre poliment l'utilisateur que l'action nécessite un pop- et pour plaire à leur permettre pour le site.

Je sais que ce n'est pas extraordinaire ou quoi que ce soit, mais il ne peut pas être plus simple et ne nécessite que 5 minutes des essais, vous pouvez passer à d'autres cauchemars.

Une fois que l'utilisateur a autorisé les pop-ups pour votre site, il serait également attentif si vous ne faites pas les fenêtres pop-up. La dernière chose que vous voulez faire est agacer vos visiteurs.

Créé 26/02/2016 à 22:49
source utilisateur

voix
0

En utilisant l'événement onbeforeunload nous pouvons vérifier comme suit

    function popup()
    {
        var chk=false;
        var win1=window.open();
        win1.onbeforeunload=()=>{
            var win2=window.open();
            win2.onbeforeunload=()=>{
                chk=true;
            };
        win2.close();
        };
        win1.close();
        return chk;
    }

il ouvrira 2 fenêtres en arrière-plan noir

la fonction retourne la valeur booléenne.

Créé 29/05/2018 à 14:56
source utilisateur

voix
0

J'ai essayé beaucoup de solutions, mais la seule que je pouvais venir avec cela aussi travaillé avec uBlock origine, était en utilisant un délai d'attente pour vérifier l'état fermé de la fenêtre contextuelle.

function popup (url, width, height) {
    const left = (window.screen.width / 2) - (width / 2)
    const top = (window.screen.height / 2) - (height / 2)
    let opener = window.open(url, '', `menubar=no, toolbar=no, status=no, resizable=yes, scrollbars=yes, width=${width},height=${height},top=${top},left=${left}`)

    window.setTimeout(() => {
        if (!opener || opener.closed || typeof opener.closed === 'undefined') {
            console.log('Not allowed...') // Do something here.
        }
    }, 1000)
}

Il est évident que c'est un hack; comme toutes les solutions à ce problème.

Vous devez fournir suffisamment de temps dans votre setTimeout pour tenir compte de l'ouverture initiale et la fermeture, donc il ne va jamais être complètement précis. Ce sera une position d'essais et d'erreurs.

Ajoutez ceci à votre liste de tentatives.

Créé 30/01/2018 à 12:29
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more