traduction Comment puis-je détecter si un navigateur bloque un popup?




pop up traduction (5)

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

Quelles méthodes la fenêtre d'appel peut-elle utiliser pour s'assurer que la nouvelle fenêtre est lancée correctement?


J'ai essayé beaucoup de solutions, mais le seul que j'ai pu trouver qui a également travaillé avec uBlock Origin, était en utilisant un délai d'attente pour vérifier le statut fermé de la popup.

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)
}

De toute évidence, c'est un hack; comme toutes les solutions à ce problème.

Vous devez prévoir suffisamment de temps dans votre setTimeout pour tenir compte de l'ouverture et de la fermeture initiales, de sorte que la précision ne sera jamais totale. Ce sera une position d'essai et d'erreur.

Ajoutez ceci à votre liste de tentatives.


J'ai essayé un certain nombre d'exemples ci-dessus, mais je n'ai pas réussi à les faire fonctionner 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.");
    }
}

Cette solution pour la vérification des bloqueurs de fenêtres contextuelles a été testée dans FF (v11), Safari (v6), Chrome (v23.0.127.95) et IE (v7 et v9). Mettez à 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! :)


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 va ouvrir 2 fenêtres noires en arrière-plan

la fonction renvoie une valeur booléenne.


Une "solution" qui fonctionnera toujours quelle que soit la société ou la version du navigateur consiste simplement à placer un message d'avertissement à l'écran, quelque part proche du contrôle qui créera une fenêtre contextuelle, qui avertit poliment l'utilisateur que l'action nécessite une et de les activer pour le site.

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

Une fois que l'utilisateur a autorisé les pop-ups pour votre site, il serait également prudent si vous n'exagérez pas les pop-ups. La dernière chose que vous voulez faire est d'ennuyer vos visiteurs.