사용자가 내 웹 사이트를 방문 할 때 광고 차단 소프트웨어를 사용하고 있는지 감지하고 싶습니다. 그들이 그것을 사용하고 있다면, 나는 이 웹 사이트 처럼 프로젝트를 지원하기 위해 끄도록 요청하는 메시지를 표시하고 싶습니다 .
해당 사이트에 들어가서 브라우저에 일종의 애드 블록 소프트웨어가 활성화 된 경우 실제 광고를 표시하는 대신 사이트에 광고 수익이 프로젝트를 호스팅하는 데 사용됨을 알리는 작은 배너가 표시됩니다. .
내 웹 사이트에서 그렇게하고 싶습니다. 애드 센스 광고를 사용하고 있습니다. 어떻게해야합니까?
답변
내 솔루션은 특정 광고 네트워크에만 국한되지 않으며 매우 가볍습니다. 나는 몇 년 동안 프로덕션 환경에서 운영해 왔습니다. 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 = ' ';
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는 아무것도 포함하지 않습니다. 누군가 애드 블록을 사용하면 실패하고 함수가 호출됩니다.