popup - हरण - वेब ब्राउज़र लिस्ट




यदि कोई ब्राउज़र पॉपअप अवरुद्ध कर रहा है तो मैं कैसे पता लगा सकता हूं? (5)

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 काली खिड़कियां खोलेगा

फ़ंक्शन बूलियन मान लौटाता है।

कभी-कभी, मैं एक वेबपेज पर आया हूं जो एक नई विंडो खोलने के लिए (उपयोगकर्ता इनपुट के लिए, या कुछ महत्वपूर्ण) पॉप करने की कोशिश करता है, लेकिन पॉपअप ब्लॉकर ऐसा होने से रोकता है।

यह सुनिश्चित करने के लिए कि नई विंडो को ठीक से लॉन्च करने के लिए कॉलिंग विंडो का उपयोग करने के क्या तरीके हैं?


अद्यतन: पॉपअप वास्तव में प्राचीन काल से मौजूद हैं। प्रारंभिक विचार मुख्य विंडो को बंद किए बिना किसी अन्य सामग्री को दिखाने के लिए था। अब तक, ऐसा करने के अन्य तरीके हैं: जावास्क्रिप्ट सर्वर के लिए अनुरोध भेजने में सक्षम है, इसलिए पॉपअप का उपयोग शायद ही कभी किया जाता है। लेकिन कभी-कभी वे अभी भी काम कर रहे हैं।

पिछले दुष्ट स्थलों में पॉपअप का बहुत दुरुपयोग हुआ। एक बुरा पृष्ठ विज्ञापनों के साथ पॉपअप विंडो के टन खोल सकता है। इसलिए अब अधिकांश ब्राउज़र पॉपअप को ब्लॉक करने और उपयोगकर्ता की सुरक्षा करने का प्रयास करते हैं।

अधिकांश ब्राउज़र पॉपअप को अवरुद्ध कर देते हैं यदि उन्हें उपयोगकर्ता-ट्रिगर इवेंट हैंडलर के बाहर बुलाया जाता है जैसे कि ऑनक्लिक।

यदि आप इसके बारे में सोचते हैं, तो यह थोड़ा मुश्किल है। यदि कोड सीधे ऑनक्लियर हैंडलर में है, तो यह आसान है। लेकिन क्या सेटअप में पॉपअप खुलता है?

इस कोड को आज़माएं:

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

पॉपअप क्रोम में खुलता है, लेकिन फ़ायरफ़ॉक्स में अवरुद्ध हो जाता है।

... और यह फ़ायरफ़ॉक्स में भी काम करता है:

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

अंतर यह है कि फ़ायरफ़ॉक्स 2000ms या उससे कम समय के लिए स्वीकार्य है, लेकिन इसके बाद - "विश्वास" को हटा देता है, यह मानते हुए कि अब यह "उपयोगकर्ता कार्रवाई के बाहर" है। तो पहला एक अवरुद्ध है, और दूसरा एक नहीं है।

मूल उत्तर जो वर्तमान 2012 था:

पॉपअप ब्लॉकर चेकिंग के इस समाधान का परीक्षण FF (v11), सफारी (v6), क्रोम (v23.0.127.95) और IE (v7 & v9) में किया गया है। जैसा कि आप फिट देखते हैं, त्रुटि संदेश को संभालने के लिए डिस्प्लेएयर फ़ंक्शन को अपडेट करें।

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

उम्मीद है की यह मदद करेगा! :)


मैंने @ केविन बी और @ डैनियलबी के समाधानों को संयुक्त किया।
यह बहुत सरल है।

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

उपयोग:

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

मैंने ऊपर दिए गए कई उदाहरणों की कोशिश की, लेकिन मैं उन्हें क्रोम के साथ काम करने के लिए नहीं मिला। यह सरल दृष्टिकोण Chrome 39, फ़ायरफ़ॉक्स 34, सफारी 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.");
    }
}

यदि आप पॉपअप खोलने के लिए जावास्क्रिप्ट का उपयोग करते हैं, तो आप कुछ इस तरह का उपयोग कर सकते हैं:

var newWin = window.open(url);             

if(!newWin || newWin.closed || typeof newWin.closed=='undefined') 
{ 
    //POPUP BLOCKED
}