Jak mohu zjistit, zda prohlížeč blokuje vyskakovací okno?

hlasů
88

Občas jsem narazil na webovou stránku, která se snaží pop otevřít nové okno (pro vstup uživatele, nebo něco důležitého), ale pop-up blokovač tomu odporují.

Jaké metody mohou volající okno použít, aby se ujistil nové okno řádně zahájena?

Položena 05/08/2008 v 23:01
zdroj uživatelem
V jiných jazycích...                            


7 odpovědí

hlasů
109

Pokud použijete JavaScript otevřít vyskakovací okno, můžete použít něco jako toto:

var newWin = window.open(url);             

if(!newWin || newWin.closed || typeof newWin.closed=='undefined') 
{ 
    //POPUP BLOCKED
}
Odpovězeno 05/08/2008 v 23:03
zdroj uživatelem

hlasů
24

Toto řešení pro kontrolu pop-up blokátory, byl testován na FF (v11), Safari (v6), chrom (v23.0.127.95) a IE (V7 a V9). Aktualizovat funkce _displayError zpracovat chybovou zprávu, jak uznáte za vhodné.

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.");
    }
};

Používání:

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

Snad to pomůže! :)

Odpovězeno 30/11/2012 v 21:39
zdroj uživatelem

hlasů
30

Zkoušel jsem několik výše uvedených příkladů, ale nemohl jsem se dostat je do práce s prohlížečem Chrome. Tento jednoduchý přístup zdá se k práci s prohlížečem Chrome 39, Firefox 34, Safari 5.1.7, a IE 11. Zde je fragment kódu z naší knihovny 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.");
    }
}
Odpovězeno 31/12/2014 v 19:16
zdroj uživatelem

hlasů
10

One „řešení“, které budou vždy pracovat nezávisle na společnosti prohlížeče nebo verze je jednoduše umístit varovnou zprávu na obrazovce, někde v blízkosti ovládací prvek, který bude vytvářet pop-up, který zdvořile varuje uživatele, že akce vyžaduje kontextová up a potěšit umožnit jim na místě.

Vím, že to není fantazie nebo tak něco, ale nemůže dostat nějakou jednodušší a vyžaduje pouze asi 5 minut zkoušky, pak se můžete přesunout na jiné noční můry.

Jakmile uživatel povoleno vyskakovací okna pro vaše stránky, bylo by také ohleduplný, pokud nepřehánějte vyskakovací okna. Poslední věc, kterou chcete udělat, je otravovat svým návštěvníkům.

Odpovězeno 26/02/2016 v 22:49
zdroj uživatelem

hlasů
0

Snažil jsem se spoustu řešení, ale jediný, kdo jsem mohl přijít s tím také pracoval s uBlock původu, byl využitím časový limit pro kontrolu uzavřený stav 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)
}

Zřejmě se jedná o hack; stejně jako všechny řešení tohoto problému.

Je třeba poskytnout dostatek času ve svém setTimeout k účtu pro první otevírání a zavírání, takže to nikdy nebude zcela přesné. Bude se jednat o pozice pokusů a omylů.

Přidejte toto do svého seznamu pokusů.

Odpovězeno 30/01/2018 v 12:29
zdroj uživatelem

hlasů
0

Pomocí onbeforeunload události můžeme zkontrolovat následovně

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

bude otevřena 2 černé okna v pozadí

Funkce vrací logickou hodnotu.

Odpovězeno 29/05/2018 v 14:56
zdroj uživatelem

hlasů
0

Spojená i @Kevin B a @ řešení DanielB je.
To je mnohem jednodušší.

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

Používání:

var popup = window.open('https://www.google.com', '_blank');
if (isPopupBlockerActivated(popup)) {
    // Do what you want.
}
Odpovězeno 27/02/2019 v 05:53
zdroj uživatelem

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