Πώς μπορώ να ανιχνεύσει αν ένα πρόγραμμα περιήγησης αποκλείει ένα αναδυόμενο παράθυρο;

ψήφοι
88

Μερικές φορές, έχω έρθει σε μια ιστοσελίδα που προσπαθεί να σκάσει ανοίξει ένα νέο παράθυρο (για είσοδο του χρήστη, ή κάτι σημαντικό), αλλά το pop-up blocker αποτρέπει ένα τέτοιο ενδεχόμενο.

Ποιες μέθοδοι μπορεί το παράθυρο ζητώντας να χρησιμοποιήσετε για να βεβαιωθείτε ότι το νέο παράθυρο που ξεκίνησε σωστά;

Δημοσιεύθηκε 05/08/2008 στις 23:01
πηγή χρήστη
Σε άλλες γλώσσες...                            


6 απαντήσεις

ψήφοι
109

Εάν χρησιμοποιείτε την Javascript για να ανοίξετε το αναδυόμενο παράθυρο, μπορείτε να χρησιμοποιήσετε κάτι σαν αυτό:

var newWin = window.open(url);             

if(!newWin || newWin.closed || typeof newWin.closed=='undefined') 
{ 
    //POPUP BLOCKED
}
Απαντήθηκε 05/08/2008 στις 23:03
πηγή χρήστη

ψήφοι
30

Προσπάθησα μια σειρά από τα παραπάνω παραδείγματα, αλλά δεν θα μπορούσα να τους πάρει για να συνεργαστεί με το Chrome. Αυτή η απλή προσέγγιση φαίνεται να λειτουργεί με το Chrome 39, Firefox 34, Safari 5.1.7, και IE 11. Εδώ είναι το απόσπασμα κώδικα από τη βιβλιοθήκη μας 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.");
    }
}
Απαντήθηκε 31/12/2014 στις 19:16
πηγή χρήστη

ψήφοι
24

Η λύση για τον έλεγχο pop-up blocker έχει δοκιμαστεί σε FF (V11), Safari (v6), Chrome (v23.0.127.95) & IE (v7 & v9). Ενημερώστε τη λειτουργία _displayError να χειριστεί το μήνυμα λάθους όπως σας βολεύει.

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

Χρήση:

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

Η ελπίδα αυτό βοηθά! :)

Απαντήθηκε 30/11/2012 στις 21:39
πηγή χρήστη

ψήφοι
10

Μια «λύση» που θα είναι πάντα λειτουργούν ανεξάρτητα από την εταιρεία του προγράμματος περιήγησης ή έκδοση είναι να τεθεί απλώς ένα προειδοποιητικό μήνυμα στην οθόνη, κάπου κοντά στη ελέγχου που θα δημιουργήσει ένα pop-up, που προειδοποιεί ευγενικά το χρήστη ότι η δράση απαιτεί ένα αναδυόμενο και να ευχαριστήσουν τους δοθεί η δυνατότητα για την ιστοσελίδα.

Ξέρω ότι δεν είναι φανταχτερό ή οτιδήποτε άλλο, αλλά δεν μπορεί να πάρει οποιαδήποτε απλούστερη και απαιτεί μόνο τη δοκιμή περίπου 5 λεπτά, στη συνέχεια, μπορείτε να προχωρήσετε σε άλλες εφιάλτες.

Μόλις ο χρήστης έχει τη δυνατότητα pop-ups για την ιστοσελίδα σας, θα ήταν επίσης να λαμβάνετε υπόψη, αν δεν το παρακάνετε με τα pop-ups. Το τελευταίο πράγμα που θέλετε να κάνετε είναι να ενοχλούν τους επισκέπτες σας.

Απαντήθηκε 26/02/2016 στις 22:49
πηγή χρήστη

ψήφοι
0

Με τη χρήση onbeforeunload περίπτωση μπορούμε να ελέγξουμε ως εξής

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

θα ανοίξει 2 μαύρα παράθυρα στο παρασκήνιο

η συνάρτηση επιστρέφει boolean τιμή.

Απαντήθηκε 29/05/2018 στις 14:56
πηγή χρήστη

ψήφοι
0

Έχω δοκιμάσει πολλές λύσεις, αλλά το μόνο που θα μπορούσε να καταλήξει ότι συνεργάστηκε επίσης με uBlock καταγωγής, ήταν με τη χρήση ενός χρονικού ορίου για να ελέγξετε την κλειστή κατάσταση του 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)
}

Προφανώς, αυτό είναι ένα hack? όπως όλες οι λύσεις σε αυτό το πρόβλημα.

Θα πρέπει να παρέχει αρκετό χρόνο στο setTimeout σας να λογοδοτήσουν για το αρχικό άνοιγμα και το κλείσιμο, γι 'αυτό ποτέ δεν πρόκειται να είναι καλά ακριβείς. Θα είναι μια θέση της δοκιμής και του λάθους.

Προσθέστε αυτό στη λίστα των προσπαθειών.

Απαντήθηκε 30/01/2018 στις 12:29
πηγή χρήστη

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