एक ब्राउज़र पॉपअप को अवरुद्ध कर रहा है या नहीं, तो मैं कैसे पता लगा सकता हूं?

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

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

0
जोड़ा संपादित
विचारों: 2

5 उत्तर

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

var newWin = window.open(url);             

if(!newWin || newWin.closed || typeof newWin.closed=='undefined') 
{ 
    //POPUP BLOCKED
}
0
जोड़ा
यह क्रोम के साथ काम नहीं करता है ;-( बेहतर केविन बी समाधान का उपयोग करें ..
जोड़ा लेखक sly63, स्रोत
क्रोम के लिए यहां एक जवाब दिया गया है: पता-अवरुद्ध-पॉपअप-इन-क्रोम
जोड़ा लेखक ajwaka, स्रोत
इसे भी पढ़ें: stackoverflow.com/a/20235765/2892117
जोड़ा लेखक Shekhar Joshi, स्रोत

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

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

जाहिर है यह एक हैक है; इस समस्या के सभी समाधान की तरह।

प्रारंभिक उद्घाटन और समापन के लिए आपको अपने सेटटाइमआउट में पर्याप्त समय प्रदान करने की आवश्यकता है, इसलिए यह कभी भी सटीक नहीं होगा। यह परीक्षण और त्रुटि की स्थिति होगी।

इसे अपनी प्रयासों की सूची में जोड़ें।

0
जोड़ा

This solution for popup blocker checking has been tested in FF (v11), Safari (v6), Chrome (v23.0.127.95) & IE (v7 & v9). Update the _displayError function to handle the error message as you see fit.

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

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

0
जोड़ा
काम नहीं किया क्रोम (v26.0.1410.64)
जोड़ा लेखक Surendra Jnawali, स्रोत
मुझे लगता है कि आपको अधिक अंडरस्कोर चाहिए
जोड़ा लेखक Jacob Stamm, स्रोत

मैंने ऊपर दिए गए कई उदाहरणों की कोशिश की, लेकिन मैं उन्हें क्रोम के साथ काम नहीं कर सका। यह सरल दृष्टिकोण क्रोम 39, फ़ायरफ़ॉक्स 34, सफारी 5.1.7, और आईई 11 के साथ काम करता प्रतीत होता है। यहां हमारे जेएस लाइब्रेरी से कोड का स्निपेट है।

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.");
    }
}
0
जोड़ा
@ सुरेंद्र कृपया, क्या आप निर्दिष्ट कर सकते हैं कि "काम नहीं कर रहे" के साथ आपका क्या मतलब है? पार्स समय पर एक त्रुटि? रनटाइम पर एक त्रुटि? पॉपअप खुलता है लेकिन इसे अवरुद्ध के रूप में चिह्नित किया जाता है? पॉपअप अवरुद्ध है लेकिन इसे खुले के रूप में चिह्नित किया गया है? मुझे कोई कारण नहीं दिख रहा है कि एक्सप्लोरर इस विफल क्यों होगा, जब तक कि एनयूएलएल पर फोकस() को कॉल करने की इजाजत नहीं है, इस मामले में, प्रयास से पहले एनयूएलएल के लिए एक परीक्षण सिर्फ काम करेगा।
जोड़ा लेखक FrancescoMM, स्रोत
यह आईई में मेरे लिए काम नहीं कर रहा है
जोड़ा लेखक Surendra, स्रोत

एक "समाधान" जो ब्राउज़र कंपनी या संस्करण के बावजूद हमेशा काम करेगा, स्क्रीन पर केवल एक चेतावनी संदेश डालना है, कहीं भी उस नियंत्रण के करीब है जो पॉप-अप बनाएगा, जो उपयोगकर्ता को विनम्रता से चेतावनी देता है कि कार्रवाई को पॉप-अप की आवश्यकता होती है और कृपया उन्हें साइट के लिए सक्षम करें।

मुझे पता है कि यह फैंसी या कुछ भी नहीं है, लेकिन यह कोई आसान नहीं हो सकता है और केवल 5 मिनट के परीक्षण की आवश्यकता है, तो आप अन्य दुःस्वप्न पर जा सकते हैं।

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

0
जोड़ा
धन्यवाद, लेकिन इसकी कोई ज़रूरत नहीं।
जोड़ा लेखक FrancescoMM, स्रोत
खैर, @ फ्रांसेस्कोएमएम, आपका बहुत स्वागत है!
जोड़ा लेखक UncaAlby, स्रोत
दुर्भाग्यवश, कभी-कभी इस प्रश्न में अन्य सभी समाधान स्वीकार्य नहीं हैं - केवल यह ही। क्यूं कर? चूंकि वे सभी पॉपअप प्रदर्शित करने का प्रयास करते हैं - न कि पॉपअप सक्षम हैं या नहीं। अगर मैं चुपचाप करना चाहता हूं तो क्या होगा?
जोड़ा लेखक Sagi Mann, स्रोत