javascript - विज्ञापन अवरोधक का पता लगाने के लिए एकेए एडब्लॉक प्लस




html adblock (10)

आपको एडब्लॉक का पता लगाने के लिए एक प्लगइन की आवश्यकता नहीं है, बस इसका उपयोग करें:

<script type="text/javascript">
    var adblock = true;
</script>
<script type="text/javascript" src="adframe.js"></script>
<script type="text/javascript">
    if(adblock) {
          //adblock is installed and enabled on this site :-D
    }
</script>

Adframe.js की सामग्री:

adblock = false;

अपडेट: एडब्लॉक प्लस कुछ अनुरोधों को ब्लॉक करता है या कुछ तत्वों को पहले से मौजूद पैटर्न के आधार पर छुपाता है। उन पैटर्न में से एक यह है ( pattern.ini में ):

[Filter]
text=/adframe.
hitCount=843
lastHit=1456391595626

जो किसी भी URL को ब्लॉक करता है जिसमें /adframe. इस में।

अपडेट 25 वां अगस्त 2018

Adblock plus ने सूची खोजने के तरीके को बदल दिया है और विज्ञापनों को ब्लॉक कर दिया है। इसमें सूचियों का एक गुच्छा है जिसे सदस्यता कहा जाता है जो अवरुद्ध करने के लिए उपयोग किया जाता है। उदाहरण के लिए यह एक जो डिफ़ॉल्ट है:

https://easylist-downloads.adblockplus.org/easylist.txt

उपयोग करने के लिए फ़ाइल नाम खोजने के लिए आप इस फ़ाइल पर नियमों का उपयोग कर सकते हैं। उदाहरण के लिए आप seo-ads.js का उपयोग कर सकते हैं

डेवलपर्स के लिए PS : किसी कारण से मुझे स्थानीय वातावरण पर इन फ़ाइलों को ब्लॉक करने के लिए ABP नहीं मिल सका।

पुनश्च : एबीपी मेरा पसंदीदा विज्ञापन अवरोधक है :- डी

कुछ घंटों के लिए Google और Stackoverflow को खोजने के बाद मुझे कोई समाधान नहीं मिला। मैं जो भी करने की कोशिश कर रहा हूं, वह एडब्लॉक प्लस का पता लगाता है और अब के लिए एक सरल संदेश प्रदर्शित करता है।

मैं क्या करना चाहता हूँ एक जावास्क्रिप्ट फ़ाइल या jQuery का उपयोग किए बिना Adblock प्लस का पता लगाने। अधिकांश एडब्लॉक प्लस ऐसी स्क्रिप्ट्स का पता लगाते हैं जो वे एक फ़ाइल का उपयोग करते हैं, उदाहरण के लिए "show_ads.js" जो कि स्वयं के डोमेन पर एक पंक्ति के साथ होस्ट किया गया है ताकि इसे "adblock = false;"

एक जावास्क्रिप्ट फ़ाइल का उपयोग करने के साथ समस्या, उपयोगकर्ता उस जावास्क्रिप्ट सूची को सफेद कर सकते हैं और यह अब इसका पता नहीं लगाएगा। मैं जो खोज रहा हूं वह एक जावास्क्रिप्ट है जो सीधे HTML में लोड होता है जो यह पता लगाएगा कि कोई व्यक्ति किसी फ़ाइल के उपयोग के बिना विज्ञापन अवरोधक का उपयोग कर रहा है या नहीं।

नीचे उदाहरण:

<script type="text/javascript">
 // line of code that detects if using ad blocker

 if so display message
 </script>

इस तरह से करने के पीछे का कारण यह है कि कोई भी विज्ञापन अवरोधक आपके सर्वर पर जावास्क्रिप्ट फ़ाइल को सूचीबद्ध नहीं कर सकता है। हाँ, मुझे पता है कि NoScript addons के साथ इसके आस-पास होने के अन्य तरीके हैं लेकिन मेरे पास इसके लिए पहले से ही एक समाधान है। मेरे पास एक बहुत अच्छा विचार है जिसे कभी कोशिश नहीं की गई है और विज्ञापन ब्लॉकर्स इसे ब्लॉक नहीं कर सकते हैं क्योंकि मैं इसके साथ काम करता हूं।

किसी भी सुझाव और उदाहरण की बहुत सराहना की जाएगी।


एक साधारण अजाक्स कॉल काम करता है:

var xmlhttp = new XMLHttpRequest()
xmlhttp.onreadystatechange = function() {
  if( xmlhttp.readyState == XMLHttpRequest.DONE ){
    if( xmlhttp.status !== 404 ){
        console.log("Blocking ads")
    }else{
        console.log("Not blocking ads")
    }
  }
}
xmlhttp.open("GET", "/498100ffe815d700cd838d1/ads/showad.js", true)
xmlhttp.send()

या एक अतिरिक्त HTTP ओवरहेड के बिना भी बेहतर है:

var adBlockTester = document.createElement('div');
adBlockTester.innerHTML = '&nbsp;';
adBlockTester.className = 'adsbox';
document.body.appendChild(adBlockTester);
window.setTimeout(function() {
  if( adBlockTester.offsetHeight === 0 ){
    console.log("Blocking ads")
  }else{
    console.log("Not blocking ads")
  }
  document.body.removeChild(adBlockTester);
}, 60);

मुझे पता है कि यह थोड़े पुराना है, लेकिन यहाँ IMHO इसे करने का एक बेहतर तरीका है:
इसे अपने <head> अनुभाग में जोड़ें:

<script type="text/javascript">
window.onload = function() {
var iframe = document.createElement('iframe'),
    randomDomain = Math.floor(Math.random() * (10000 - 100 + 1)) + 100,
    iframeLoaded = true;

iframe.src = "http://"+ randomDomain +".com/ads.html";
iframe.height = ".1px";
iframe.width = ".1px";
iframe.id = 'some-ad';
iframe.onload = function() {iframeLoaded = false;};

document.body.appendChild(iframe);

setTimeout(function() { 
    var someAd = document.getElementById('some-ad');
    if(!iframeLoaded ||
       someAd == null || 
       someAd.style.display == "none" || 
       someAd.style.display == "hidden" || 
       someAd.style.visibility == "hidden" || 
       someAd.offsetHeight == 0)
        document.getElementById('ab-message').style.display = 'block';
    someAd.remove();
}, 500);
};
</script>`<br>

अब आप जहां भी AdBlock उपयोगकर्ताओं को संदेश दिखाना चाहते हैं, आप ab-message id का उपयोग कर सकते हैं:

<div id="ab-message" style="display: none">Your message here!</div>

मूल रूप से इसे छिपाने के लिए जोड़ा गया इनलाइन शैली पर ध्यान दें (बेशक, आप अपनी सीएसएस फ़ाइल से भी ऐसा कर सकते हैं)।
यह भी ध्यान दें कि इसमें 500ms लगते हैं, ऐसा इसलिए है क्योंकि इसके लिए एडब्लॉकर को अपनी बात करनी है।

यह स्क्रिप्ट कैसे काम करती है, इसकी थोड़ी व्याख्या

सबसे पहले, यह एक बेतरतीब ढंग से उत्पन्न लिंक के स्रोत के साथ एक iframe जोड़ता है। (यह यादृच्छिक रूप से उत्पन्न होता है क्योंकि कुछ एडब्लॉक स्मार्ट होते हैं, कुछ बिंदु पर, उन्हें पता चलता है कि एक लिंक नकली है)।
फिर यह उस iframe (यदि इसे सफलतापूर्वक लोड किया गया था या यदि इसकी शैली को संशोधित किया गया था) पर कई चेक चलाता है। यदि इनमें से एक परीक्षण सत्य है, तो यह उपयोगकर्ताओं को एडब्लॉक करने के लिए ab-message तत्व प्रदर्शित करता है।

यह स्क्रिप्ट अधिकांश (यदि सभी नहीं) विज्ञापन ब्लॉकर्स के लिए काम करती है।

अतिरिक्त

कोई मतलब नहीं, वास्तव में, बस एक जिस्ट बनाया जा सकता था, लेकिन इसके बजाय मैंने एक गितुब प्रोजेक्ट बनाया, लेकिन फिर भी, इसे जांचें और अगर यह आपकी मदद करता है तो इसे स्टार करें।
abDetector: सरल वेनिला जावास्क्रिप्ट एडब्लॉक डिटेक्टर।
का आनंद लें।


मेरे प्लगइन का उपयोग करें "FuckAdBlock", यह बहुत आसानी से AdBlock का पता लगा सकता है: https://github.com/sitexw/FuckAdBlock

उदाहरण :

fuckAdBlock.on(true, function() {
    alert('AdBlock detected !');
}).on(false, function() {
    alert('AdBlock is not detected =)');
});

उदाहरण ऑनलाइन: http://fuckadblock.sitexw.fr/


मेरे लिए कुछ भी काम नहीं आया, हो सकता है कि मैं कुछ गलत कर रहा हूं। लेकिन यह Google विज्ञापनों के लिए लागू करने का एक बहुत ही विशिष्ट तरीका है।

window.onload = function() {
   if (document.getElementsByClassName('google-auto-placed').length == 0){
                // Adblock Detected
   }        
}

यदि आपके पास अमेजन जैसी अन्य विज्ञापन प्रणाली है, तो पृष्ठ का निरीक्षण करके उनके सामान्य वर्ग का नाम / आईडी देखें।

यदि आप इस कोड को अलग करने के लिए योजना बना रहे हैं .js फ़ाइल सुनिश्चित करें कि फ़ाइल का नाम इसमें "विज्ञापन" शब्द नहीं है । बस इसका नाम जादू है। js

यदि Google कभी भी div नाम बदलने का निर्णय लेता है, तो यह विधि विफल हो जाएगी। लेकिन लगता है कि संभावना नहीं है।


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

<div id="ad-container">
  <img src="../ad/ad.png" id="ad">
</div>

सीएसएस के साथ:

#ad-container {
  background-image: url( http://domain.com/pleasedonotuseadblocker.png );
  height: 200px;
  width: 200px;
}

#ad {
  height: 200px;
  width: 200px;
}

यदि आप विज्ञापन दिखाना चाहते हैं, तब भी जब AdBlock सक्रिय है, तो आपको यह समझना होगा कि AdBlock क्या करने में सक्षम है।

  1. AdBlock संसाधनों को लोड करने से रोक सकता है
  2. AdBlock DOM में विशिष्ट तत्वों को छिपा सकता है।

यद्यपि यह कहा जाता है कि AdBlock CSS को संशोधित भी कर सकता है, लेकिन मैं तत्वों को छिपाने और ढहने के अलावा उस पर कोई दस्तावेज नहीं पा सकता हूं।

तो क्या वास्तव में आप AdBlock की तुलना में 'होशियार' हो सकते हैं?

आप अपने अनुरोध को इस तरह से अस्वीकार कर सकते हैं कि वह कभी भी परिपक्व नहीं होगा (उदाहरण के लिए http://domain.com/ae9a70e0a.png , जहां हर बार छवि का नाम यादृच्छिक होगा और आम उपसर्ग के बिना)। जहां तक ​​मुझे जानकारी है, AdBlock में एक नियम में एक रेगेक्स नहीं हो सकता है। एक नियम या तो कोई विज्ञापन या बहुत सारे संसाधनों से मेल नहीं खाता। आपके विज्ञापन को इंगित करने के लिए सर्वर पर इस तरह के यूआरएल को फिर से लिखना संभव होगा।

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

जहां तक ​​एक स्क्रिप्ट जाती है, तो आप विज्ञापन को अजाक्स अनुरोध के साथ लोड करने में सक्षम हो सकते हैं। मुझे लगता है (लेकिन परीक्षण नहीं कर सकते) कि यह एक त्रुटि देगा यदि संसाधन लोड नहीं किया जा सकता (क्योंकि यह अवरुद्ध था)। ( $.ajax( request ).error( function() { ... } ); jQuery में या नियमित जावास्क्रिप्ट में कुछ समकक्ष)। आप इसका उपयोग कुछ और करने के लिए कर सकते हैं। आप इसे दस्तावेज़ में ही शामिल कर सकते हैं, बाहरी संसाधन के बजाय, यह सुनिश्चित करने के लिए कि यह हमेशा चलेगा (यदि जावास्क्रिप्ट सक्षम है)। फिर भी, आप यह सुनिश्चित नहीं कर सकते हैं कि 'आप जो भी करते हैं' कभी भी दिखाई दे। अंतिम उपाय के रूप में आप एक window.alert( ... ) बना सकते हैं। मान लें कि 3 पृष्ठों के भीतर, आपके आगंतुक कभी वापस नहीं आएंगे यदि आप इसका उपयोग करते हैं।

जिस तरह से मैं सोच सकता हूं, वह सर्वर के लिए एक वेबस्कैट बना रहा है (यह AdBlock द्वारा अवरुद्ध नहीं किया जा सकता है)। यदि एक निश्चित पृष्ठ लोड होने पर विज्ञापन पृष्ठ लोड नहीं होते हैं तो सर्वर साइड पर आपको जांचना होगा। यह जानकारी सॉकेट के माध्यम से भेजी जा सकती है, जिसका उपयोग आपकी स्क्रिप्ट में 'कुछ' करने के लिए किया जा सकता है। हालांकि, यह पागल जटिल लगता है और AdBlock का पता लगाने वाली एक स्क्रिप्ट 'सिर्फ' के लिए एक महत्वपूर्ण ओवरहेड है।


यह सुनिश्चित करने के लिए हथियारों की दौड़ है, और मैं विज्ञापनों को अवरुद्ध करने के लिए किसी के अधिकार का समर्थन करता हूं, लेकिन मैं उन वेबसाइटों का भी समर्थन करता हूं, जो उपयोगकर्ताओं को अन्यथा समझाने के लिए विज्ञापन राजस्व पर निर्भर हैं, या शायद उन्हें खोए हुए राजस्व के लिए सदस्यता लेने या दान करने के लिए राजी करते हैं। । मैं उपयोगकर्ताओं को विज्ञापन देखने के लिए बाध्य करने वाली साइटों को स्वीकार नहीं करता, लेकिन एक विनम्र संदेश ठीक है।

वैसे भी, अभी यह ध्यान देने योग्य है कि कई एडब्लॉकिंग एक्सटेंशन / प्लगइन्स हैं, और वे सभी इसे करने के अलग-अलग तरीके हो सकते हैं, और यह कभी-कभी ओएस और ब्राउज़र के बीच भी भिन्न होता है। मैंने पाया है कि अभी मेरे उद्देश्यों के लिए, यह jQuery चयनकर्ता कम से कम यह देखने के लिए पर्याप्त है कि क्या AdBlock या AdBlockplus का उपयोग किया जा रहा है, क्रॉस-प्लेटफ़ॉर्म, कम से कम क्रोम और फ़ायरफ़ॉक्स में:

if($("div[id^=google_ads_iframe_] iframe:visible").length == 0)  {
    // pop up a message or whatever
} 

यहां इससे निपटने का सबसे सरल तरीका है (कोई iframe, कोई jquery नहीं):

var elem = document.createElement('div');
elem.className = 'adclass';
document.body.appendChild(elem);
window.setTimeout(function () {
    var isAdblockEnabled = !(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);
    if (isAdblockEnabled) {
        // Adblock is enabled
    }
}, 0);

सबसे स्मार्ट और सबसे आसान तरीका जो मैंने पाया है:

1) इस html कोड को अपने मार्कअप में कहीं न कहीं शीर्ष पर जोड़ें।

<div id="bait" class="pub_300x250" style="color: #fff">.</div>

आमतौर पर विज्ञापन ब्लॉकर्स ईज़ाइलिस्ट में उल्लिखित (pub_300x250) के विज्ञापन आकारों का पता https://easylist-downloads.adblockplus.org/easylist.txt और उन्हें अवरुद्ध कर देते हैं, जिसे "चारा" द्वारा ट्रिगर किया जाता है।

2) फिर इस js कोड को अपनी स्क्रिप्ट फ़ाइल में जोड़ें।

if (document.getElementById("bait").offsetHeight === 0) {
    // function code or alert (whatever) here.
   alert("Ad-Blocker DETECTED");
}

हमारी स्क्रिप्ट पता लगाती है कि मार्कअप का वह टुकड़ा वर्तमान html में थोरुग "बैट" आईडी की जाँच करके मौजूद है।

यह मेरे लिए Adblock , AdBlock-Plus & uBlock Origin हर ब्राउज़र पर हर साइट पर काम करता है।





adblock