popup - telephone - pop up traduction




Comment puis-je détecter si un navigateur bloque un popup? (5)

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 noires en arrière-plan

la fonction retourne une valeur booléenne.

Il m'est parfois arrivé de rencontrer une page Web qui tente d'ouvrir une nouvelle fenêtre (pour permettre la saisie de l'utilisateur ou quelque chose d'important), mais le bloqueur de fenêtres contextuelles empêche que cela ne se produise.

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


J'ai combiné les solutions de @Kevin B et de @ DanielB.
C'est beaucoup plus simple.

var isPopupBlockerActivated = function(popupWindow) {
    if (popupWindow) {
        if (/chrome/.test(navigator.userAgent.toLowerCase())) {
            try {
                popupWindow.focus();
            } catch (e) {
                return true;
            }
        } else {
            popupWindow.onload = function() {
                return (popupWindow.innerHeight > 0) === false;
            };
        }
    } else {
        return true;
    }
    return false;
};

Usage:

var popup = window.open('https://www.google.com', '_blank');
if (isPopupBlockerActivated(popup)) {
    // Do what you want.
}

J'ai essayé plusieurs exemples ci-dessus, mais je ne pouvais pas 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 extrait 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.");
    }
}

Mise à jour: Les popups existent depuis des temps très anciens. L'idée initiale était de montrer un autre contenu sans fermer la fenêtre principale. Pour le moment, il existe d'autres moyens de le faire: JavaScript est capable d'envoyer des demandes de serveur, les popups sont donc rarement utilisés. Mais parfois, ils sont toujours utiles.

Dans le passé, les sites maléfiques abusaient beaucoup des popups Une mauvaise page pourrait ouvrir des tonnes de fenêtres popup avec des publicités. Alors maintenant, la plupart des navigateurs essaient de bloquer les popups et de protéger l’utilisateur.

La plupart des navigateurs bloquent les fenêtres contextuelles si elles sont appelées en dehors des gestionnaires d'événements déclenchés par l'utilisateur, comme onclick.

Si vous y réfléchissez, c'est un peu délicat. Si le code est directement dans un gestionnaire onclick, c'est facile. Mais quelle est la popup s'ouvre dans setTimeout?

Essayez ce code:

 // open after 3 seconds
setTimeout(() => window.open('http://google.com'), 3000);

La fenêtre s'ouvre dans Chrome, mais est bloquée dans Firefox.

… Et cela fonctionne aussi dans Firefox:

 // open after 1 seconds
setTimeout(() => window.open('http://google.com'), 1000);

La différence est que Firefox traite une temporisation de 2000 ms ou moins sont acceptables, mais après cela - supprime la "confiance", en supposant que cela est maintenant "en dehors de l'action de l'utilisateur". Donc, le premier est bloqué et le second ne l'est pas.

Réponse originale qui était courant 2012:

Cette solution de vérification du bloqueur de fenêtres publicitaires intempestives a été testée sous 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! :)


Une «solution» qui fonctionnera toujours , quelle que soit la compagnie ou la version du navigateur, consiste simplement à afficher un message d’avertissement à l’écran, quelque part près du contrôle qui créera une fenêtre contextuelle, avertissant poliment l’utilisateur que l’action nécessite une fenêtre contextuelle. et de les activer pour le site.

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

Une fois que l'utilisateur a autorisé les fenêtres publicitaires intempestives pour votre site, il serait également utile de ne pas en abuser. La dernière chose que vous voulez faire est d’ennuyer vos visiteurs.