[adsense] 내 웹 사이트에서 Adblock을 감지하는 방법은 무엇입니까?

사용자가 내 웹 사이트를 방문 할 때 광고 차단 소프트웨어를 사용하고 있는지 감지하고 싶습니다. 그들이 그것을 사용하고 있다면, 나는 이 웹 사이트 처럼 프로젝트를 지원하기 위해 끄도록 요청하는 메시지를 표시하고 싶습니다 .

해당 사이트에 들어가서 브라우저에 일종의 애드 블록 소프트웨어가 활성화 된 경우 실제 광고를 표시하는 대신 사이트에 광고 수익이 프로젝트를 호스팅하는 데 사용됨을 알리는 작은 배너가 표시됩니다. .

내 웹 사이트에서 그렇게하고 싶습니다. 애드 센스 광고를 사용하고 있습니다. 어떻게해야합니까?



답변

내 솔루션은 특정 광고 네트워크에만 국한되지 않으며 매우 가볍습니다. 나는 몇 년 동안 프로덕션 환경에서 운영해 왔습니다. AdBlock은 “ads”라는 단어가 포함 된 모든 URL을 차단합니다. 이것이 내가 한 일입니다.

작은 js 파일을 웹 루트에 이름으로 추가했습니다. ads.js

이것은 해당 파일의 유일한 코드 줄입니다.

var canRunAds = true;

그런 다음 내 페이지 어딘가에 :

<html>
  <head>
    <script src="/js/ads.js"></script>
  </head>
  <body>
    <script>
      if( window.canRunAds === undefined ){
        // adblocker detected, show fallback
        showFallbackImage();
      }
    </script>
  </body>
</html>

ads.js와 같은 파일은 Chrome에서 다음과 같은 애드 블로커에 의해 차단됩니다.

  • 애드 블록
  • 애드 블록 플러스
  • 애드 블록 프로
  • 유령

2019-02-15에 업데이트 :

확장 프로그램이 ads.js에 대한 요청도 차단하므로 위 목록에 Ghostery가 추가되었습니다. 매우 편리합니다. 이것은 Ghostery가 실제로 개발자가 확장 프로그램을 사용하여 광고가 차단되는 것을 감지하는 데 도움이된다는 것을 의미합니까?

작동하지 않습니다 :

프라이버시 오소리


답변

직접적인 대답은 아니지만 광고 뒤에 메시지를로드하여 표시하려고합니다. 감지하려고하면 광고가 표시되지 않을 때 표시됩니다.


답변

http://thepcspy.com/read/how_to_block_adblock/

jQuery로 :

function blockAdblockUser() {
    if ($('.myTestAd').height() == 0) {
        window.location = 'http://example.com/AdblockNotice.html';
    }
}

$(document).ready(function(){
    blockAdblockUser();
});

물론 AdblockNotice.html에 대한 방문 페이지가 있어야하며 .myTestAd 클래스는 실제 광고 컨테이너를 반영해야합니다. 그러나 이것은 효과가 있습니다.

편집하다

TD_Nijboer가 권장하는 것처럼 더 나은 방법은 :hidden(또는 :visible아래에서 사용하는) 선택기 를 사용하여 display: none확인하는 것입니다.

function blockAdblockUser() {
    if ($('.myTestAd').filter(':visible').length == 0) {
        // All are hidden, or "not visible", so:
        // Redirect, show dialog, do something...
    } else if ($('.myTestAd').filter(':hidden').length > 0) {
        // Maybe a different error if only some are hidden?
        // Redirect, show dialog, do something...
    }
}

물론, 이들 둘 다 if원하는 경우 하나의 블록 으로 결합 될 수 있습니다 .

visibility: hidden(레이아웃 공간 숙박,하지만 광고가 표시되지 않는 경우) 중 하나뿐만 아니라 의해 캡처되지 않습니다. 이를 확인하기 위해 다른 필터를 사용할 수 있습니다.

$('.myTestAd').filter(function fi(){
    return $(this).css('visibility') == 'hidden';
})

그러면 “보이지 않는”( 0이론적으로 문제 가 되는 것보다 큰) 광고 요소 배열이 제공됩니다 .


답변

추가 요청이 없습니다. 외부 라이브러리가 없습니다. 평범하고 간단한 JavaScript :

var adBlockEnabled = false;
var testAd = document.createElement('div');
testAd.innerHTML = '&nbsp;';
testAd.className = 'adsbox';
document.body.appendChild(testAd);
window.setTimeout(function() {
  if (testAd.offsetHeight === 0) {
    adBlockEnabled = true;
  }
  testAd.remove();
  console.log('AdBlock Enabled? ', adBlockEnabled)
}, 100);

  • 클래스 adsbox를 사용하여 요소를 만듭니다 (AdBlock Plus의 정의 파일에 이동식 요소로 정의 됨)
  • 문서에 추가하고 offsetHeight를 읽는 동안 잠시 후
  • AdBlock이 설치된 경우 요소의 높이가 없습니다.

에 신용 기독교 Heilmann의 게시물에 , 나는 그것이 지금까지 AdBlock을을 검출하기위한 가장 좋은 방법 같아요.


답변

대부분의 광고는 자바 스크립트로 동적으로로드됩니다. 방금 onerror 이벤트를 사용하여 광고 스크립트를로드 할 수 있는지 여부를 감지했습니다. 작동하는 것 같습니다.

GoogleAds의 예 :

<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js" onerror="adBlockFunction();"></script>

광고 차단기가 콘텐츠를 차단하고 있는지 확인하기 위해 다른 요소에도 사용할 수 있습니다. 원격 요소가 존재하지 않거나 도달 할 수없는 경우이 메소드는 오 탐지를 생성 할 수 있습니다.


답변

사용자가 광고를 차단하고 있는지 감지하려면 광고 자바 스크립트에서 함수를 찾아 테스트 해보십시오. 광고를 차단하기 위해 어떤 방법을 사용하든 문제가되지 않습니다. Google Adsense 광고의 모습은 다음과 같습니다.

if(!window.hasOwnProperty('google_render_ad') || window.google_render_ad === undefined) {
    //They're blocking ads, display your banner
}

이 방법은 여기에 요약되어 있습니다 : http://www.metamorphosite.com/detect-web-popup-blocker-software-adblock-spam


답변

jquery를 사용하는 가장 쉬운 해결책은 다음과 같습니다.

$.ajax({
    url: "/scripts/advertisement.js", // this is just an empty js file
    dataType: "script"
}).fail(function () {
    // redirect or display message here
});

Advertise.js는 아무것도 포함하지 않습니다. 누군가 애드 블록을 사용하면 실패하고 함수가 호출됩니다.