سؤال

كنت زيارة مؤخرا موقع ولاحظت أن الصفحة لديها قسم قال إنه لاحظت أنني كنت أستخدم برنامج Adblocking ويمكنني إيقاف تشغيله للمساعدة في دعم موقع صغير مثل هذا. كنت أتساءل فقط كيف ستفعل ذلك؟ هل سيكون من الأفضل القيام بأجانب العميل أو جانب الخادم؟

هل كانت مفيدة؟

المحلول

هذا شيء لا يمكن ببساطة القيام به جانب الخادم - هناك سبب Zilch للشخص أن يطرق بابك ويقول "انظر إلي، لدي adblockplus!". عند في الجانب العميل، يحاول ADBlock بنشاط التأثير على محتوى الصفحة، وهو شيء يمكنك رؤيته يحدث ورؤية أنهم يستخدمون AdBlocker.

على أي حال، حدث أن أعرف أن Newgrounds.com يقوم بذلك أيضا. (تم تصميم تخطيطها الجديد ل Adblock Plus للمستخدمين - كإعادة استجابة قاموا بمسابقة للأفضل "إذا كنت لن تساعدنا من خلال إعلاناتنا، فانتقل وشراء شيء ما في المتجر" - Bebanner.

أخبرني نظرة سريعة في مصدر Newgrounds أنهم يفعلون ذلك مع بعض جافا سكريبت بسيط. أولا في المستند:

var user_is_leecher = true;

التالي هناك علامة نصية خارجية: src=checkabp?thisistotrickabp=***adress of ad affilliate***

الآن النكتة: أنها ببساطة الثقة adblock plus لتصفية هذا البرنامج النصي، كما هو كل ما في هناك: user_is_leecher = false;

من هناك، يمكنهم القيام بأي شيء فقط.

نصائح أخرى

جميع الطرق المذكورة هنا تعتمد على حاصرات الإعلانات لتجريد التعليمات البرمجية. هذا لا يعمل لبعض adblockers (مثل netbarrier على ماك). يجب عليك أيضا الاستمرار في تحديث التعليمات البرمجية الخاصة بك عندما يصطاد Adblockers.

للكشف عن ما إذا كان المستخدم يحظر الإعلانات، كل ما عليك فعله هو العثور على وظيفة في جافا سكريبت الإعلان ومحاولة الاختبار لذلك. لا يهم الطريقة التي يستخدمونها لحظر الإعلان. إليك ما يبدو عليه من أجل إعلانات Google AdSense:

if(typeof(window.google_render_ad)=="undefined") 
{ 
    //They're blocking ads, do something else.
}

تم تحديد هذه الطريقة هنا: http://www.metamorphosite.com/detect-web-popup-blocker-software-adblock-spam.

يمكنك القيام بذلك على جانب الخادم بطلبات الاقتران لصفحات HTML ولإعلانات أكوردنغ (ربما مع بعض المعرفات الفريدة لكل طلب ...) ولكن هذه مجرد فكرة، لم أحاول ذلك أبدا رأيتها المستخدمة.

لقد وجدت هذا الجزء في التعليمات البرمجية التي يبدو أنها تبدو وكأنها فعلت ذلك:

/*MOOTOOLS*/
window.addEvent('domready', function(){

$$('.cat-item').each(function(el) { 
    var fx = new Fx.Morph(el,{ duration:300, link:'cancel' }); 
        el.addEvents({ 
        'mouseenter': function() { fx.start({ 'padding-left': 25 }); }, 
        'mouseleave': function() { fx.start({ 'padding-left': 15 }); } 
        }); 
    });

    if ($$(".google-sense468")[0] && $$(".google-sense468")[0].clientHeight == 0 && $('block-warning')) $('block-warning').setStyle('display','block');

});
/*MOOTOOLS END*/

أعتقد أن هناك عدة طرق للقيام بذلك، ولكن ربما يكون أسهل واحد سيكون لديك نوع من صورة الخلفية، أو النص، سيتم استبداله عند تحميل الإعلان. وبالتالي، إذا تم تحميل الإعلان، فسترى الإعلان. إذا لم يتم تحميل الإعلان، فسترى النص.

سيكون هذا المثال الجانب العميل، قد يؤدي إما إلى جافا سكريبت أو مجرد CSS عادي حتى يكفي.

قد يكون هناك بعض الحيلات من جانب الخادم التي يمكن أن تفعل ذلك أيضا، لكنها ستكون تفصيلا وغير ضروري. ستشمل إحدى الطرق التي ينبعثها في الاعتبار نوعا ما من واجهة برمجة تطبيقات API مع المعلن الذي يمكن سؤاله عن "هل المستخدم من IP HEL.And.Such تحميل أي صور؟" وبهذه الطريقة الحصول على الجواب. لكنني أشك في أن هذه الخدمات - سيكون من الأسهل بكثير القيام به على جانب العميل.

أعتقد أن هذا أسهل بكثير للقيام بذلك على جانب العميل من جانب الخادم. يتم تثبيت حاصرات الإعلانات على العميل، حتى يتمكنوا من التعامل مع طلبات DOM وحظر طلبات AJAX. لهذا السبب أعتقد أنه من المنطقي الكشف عن العميل أكثر من الخادم.

على أي حال، هذا هو البرنامج المساعد البسيط المستقل الذي يكتشف المستخدمون مع تمكين المستخدمين مع مانعات الإعلانات، إنه مفتوح المصدر والمصدر الكامل في GitHub:

https://github.com/retargetly/mockingbird.

إنه أكثر من توجه الناشر حتى يتمكنوا من إظهار الرسائل بسهولة على حاويات الإعلانات أو في نافذة منبثقة. يتم تحديث البرنامج المساعد بشكل متكرر، ويستحق المحاولة. هذا هو الكمان أيضا:

http://jsfiddle.net/retargetly/9vsha32h/

الطريقة الوحيدة التي تحتاجها لاستخدامها هي

mockingbird.adsBlocked(Obj)

يمكن إجراء المكالمة في أي مكان في التعليمات البرمجية ولا تحتاج إلى jQuery لجعلها تعمل.

أتمنى لك التوفيق !

لا أعتقد أن هناك طريقة سهلة للقيام بذلك. ما يمكنك القيام به هو إنشاء "فخ". اجعل برنامج نصي php يستمع إلى عنوان URL واضحا جدا مثل yourdomain.com/ad.png. ربما يمكنك تحقيق ذلك بواسطة إعادة كتابة URL. إذا تم تحميل هذه الصفحة، فيمكنك ملاحظة هذا في متغير الجلسة وإرسال مرة أخرى من PNG 1x1 فارغة.

في الطلب التالي، يمكنك معرفة ما إذا كان تم تحميل AD.PNG. إذا لم يكن بإمكانك تخمين أن العميل يستخدم بعض أشكال برنامج AdBlock. تأكد من تعيين رؤوس HTTP المناسبة لمنع العملاء من التخزين المؤقت "ad.png".

هذا هو نهج جانب الخادم الوحيد الذي يمكنني التفكير فيه في الوقت الحالي ولديه بعض العيوب.

  • يمكن تخزين ملف PNG مخزنة مؤقتا بغض النظر عن رؤوس HTTP
  • لن يعمل هذا على طلب HTTP الأول
  • بعض حمولة الخادم الإضافية حيث ستظل المستعرضات ضرب ad.png لكل طلب
  • أن يتم تحميل الصورة من الخادم ليست ضمانا لأنه يتم عرضه بالفعل
  • ربما أكثر من الآثار الجانبية التي لم أفكر فيها

يرجى تقديم تعليق على هذا المنشور إذا قررت تجربته.

فيما يتعلق بحل جانب العميل. هذا لا ينبغي أن يكون صعبا. يمكنك إنشاء جافا سكريبت صغيرة لتشغيل تحميل الصفحة كاملة. يمكن لهذا البرنامج النصي التحقق من أن الصفحة تحتوي على العقد DOM - عقد الإعلانات. إذا قمت بذلك عندما يتم تحميل الصفحة بالكامل (ليس فقط DOM)، فيمكنك التحقق من عرض وارتفاع صورك الإعلانية. العيب الأكثر وضوحا مع هذا الحل هو أن العملاء يمكنهم تعطيل Javascripts.

بعض الإجابات الجيدة هنا، لذلك أنا فقط أضيف هذا:

استخدم بعض نظام إدارة الإعلانات (يمكنك كتابة خاصة بك). مع ذلك، تتبع كل إعلان يتم عرضه (وجعله واضحا، مثل ADS.PHP أو Showad.php أو أيا كان). إذا لم يتم استدعاء هذا البرنامج النصي أبدا، فإن المستخدم يستخدم بعض أشكال برنامج حظر الإعلانات.

تأكد من التعامل مع كل إعلان من خلال هذا المعالج، رغم ذلك. mod_rewrite غير مطلوب، يمكن القيام به باستخدام PHP بسيط.

ما يمكنك القيام به للكشف عن AdBlocker على جانب الخادم هو ما يشبه:

<?php

  header('Content-Type: application/javascript');

  //Save it to session
  session_start();
  $_SESSION['noAdblocker']=true;

 ?>

 noAdblocker=true;

احفظ هذا الملف ads.php

الآن index.php:

<?php
  session_start();
  $_SESSION['noAdblocker']=false;
?>
<!DOCTYPE HTML><html><head>
    <!-- Now place the "ad-script" -->
    <script src="ads.php"></script>
</head><body></body></html>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top