質問
ユーザーが私のウェブサイトにアクセスしたときに、ユーザーがソフトウェアを使用しているかどうかを検出できるようにしたいと思います。彼らがそれを使用している場合、私は彼らにプロジェクトをサポートするためにそれをオフにするように依頼するメッセージを表示したいと思います。 このウェブサイト します。
そのサイトに入力し、ブラウザに何らかのAdblockソフトウェアが有効になっている場合、実際の広告を表示する代わりにサイトには、広告の収益がプロジェクトのホストに使用されていることをユーザーに伝える小さなバナーが表示され、Adblockをオフにすることを検討する必要があります。 。
私は自分のウェブサイトでそれをやりたいです、私はそれでアドセンス広告を使用しています、どうすればそれをすることができますか?
解決
私のソリューションは特定の広告ネットワークに固有ではなく、非常に軽量です。私は数年間生産でそれを実行してきました。 adblock「ADS」という単語を含むすべてのURLをブロックします。だからこれが私がしたことです:
名前を付けて小さなJSファイルをWebrootに追加しました 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上のこれらのADBlockerによってブロックされます。
- adblock
- AdBlock Plus
- AdBlock Pro
- ghostery
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...
}
}
もちろん、これらは両方とも1つに結合することができます 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の定義ファイルの取り外し可能な要素として定義されています)
- あなたはそれをドキュメントに追加し、しばらくしてからそのオフセタイトを読んだ後
- Adblockがインストールされている場合、要素には高さがありません。
のクレジット クリスチャン・ハイルマンの投稿, 、Adblockを検出するための最良のソリューションだと思います。
ほとんどの広告は、JavaScriptで動的にロードされています。 OnErrorイベントを使用して、広告スクリプトをロードできるかどうかを検出しました。うまくいくようです。
Googleadsの例:
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js" onerror="adBlockFunction();"></script>
これは、他の要素でも使用でき、広告ブロッカーがコンテンツをブロックしているかどうかを確認できます。この方法は、リモート要素が存在しないか、到達できない場合、誤検知を生成する可能性があります。
ユーザーが広告をブロックしているかどうかを検出するには、AD JavaScriptに関数を見つけてテストを試みるだけです。広告をブロックするために使用している方法は関係ありません。これが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
});
Advertisement.jsには何も含まれていません。誰かがadblockを使用すると、失敗し、関数が呼び出されます。
私はすでに十分な答えがあることを知っていますが、この質問がGoogleで「Adblockを検出」を検索したので、あなたがいる場合に洞察を提供したかったのです AdSenseを使用していません.
具体的には、この例では、Firefox Adblockが提供するデフォルトのAdblockリストが使用されているかどうかを検出できます。このブロックリストには、CSS IDでブロックされた要素があることが有利になります #bottomAd
. 。このような要素をページに含めて高さをテストすると、アドブロックがアクティブかどうかがわかります。
<!-- some code before -->
<div id="bottomAd" style="font-size: 2px;"> </div>
<!-- some code after -->
残りは通常のjQuery容疑者を介して行われます:
$(document).ready( function() {
window.setTimeout( function() {
var bottomad = $('#bottomAd');
if (bottomad.length == 1) {
if (bottomad.height() == 0) {
// adblocker active
} else {
// no adblocker
}
}
}, 1);
}
ご覧のとおり、私は使用しています setTimeout
少なくとも1msのタイムアウトで。私はこれをさまざまなブラウザでテストし、ほとんどの場合、要素を直接チェックしています ready
常に0を返します。 Adblockerがアクティブであったかどうかに関係なく。私はこれについて2つのアイデアを持っていました:レンダリングがまだ終わっていないか、Adblockがまだキックインしていません。私はさらに調査することを気にしませんでした。
私のアドバイスは、それをしないでください!
人々を「不正行為者」として扱うシナリオは、彼らが反撃することになります。
これが私の提案です。
テキストでページの上部に小さな目立たないメッセージを(広告がブロックされているかどうかに関係なく)配置します I *totally* respect your right to block ads
別のページ/ポップアップへのリンク Read more ...
.
他のページでは、それが彼らのコンピューターであることを理解しており、広告ブロッキングを自由に使用できることを明確にしてください。
また、それを明確にします 不正確な方法で これらのブロッカーを使用すると、素晴らしいコンテンツを提供することがより困難になり(詳細に理由を説明します)、そしてあなたがあなたのサイトで起こらないように広告ブロッキングを好むが、それは完全に彼らの決定です。ブロッキングをオフにすることのポジティブに焦点を当てます。
広告に激しく反対している人はこれを無視しますが、とにかく彼らを説得するチャンスはありませんでした。あなたが「私の道を手に入れようとするか、私は私のボールを取り、家に帰る」ことを正直に言っていないので、あなたの魅力に無関心な人はあなたの魅力に揺れるかもしれません。
誰もあなたの頭に銃を持っていないことを覚えておいて、あなたのものをネットに置くことを強制しました。読者/ユーザーを敬意を持って扱うと、おそらくそれらの多くが往復することがわかります。
彼らは、Googleの広告コードがID「iframe」でiframeを作成するという事実を利用しています。そのため、そのIDでページにまだ何かがない限り、これもあなたのために機能します。
<p id="ads">
<script type="text/javascript"><!--
google_ad_client = "their-ad-code-here";
/* 160x600, droite */
google_ad_slot = "their-ad-code-here";
google_ad_width = 160;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</p>
<script type="text/javascript"><!--
if(document.getElementsByTagName("iframe").item(0) == null)
{
document.write("<div style='width:160px; height:600px; padding-top: 280px; margin-left:5px;border:1px solid #000000; text-align:center; font-family:century gothic, arial, helvetica, sans serif;padding-left:5px;padding-right:5px;'>Advertising seems to be blocked by your browser.<br /><br /><span style='font-size:10px'>Please notice that advertising helps us to host the project.<br /><br />If you find these ads intrusive or inappropriate, please contact me.</span><img src='http://www.playonlinux.com/images/abp.jpg' alt='Adblock Plus' /></div>");
}
--></script>
以前のコメントがGoogle AdSenseをオブジェクトとして使用してテストしていることに気付きました。一部のページはAdSenseを使用していません。テストとしてAdSenseブロックを使用することは本当に良い考えではありません。 AdSenseブロックはSEOに害を及ぼす可能性があるためです。 Adblockerの単純なブロッククラスで検出する方法の例は次のとおりです。
HTML:
<div class="ad-placement" id="ablockercheck"></div>
<div id="ablockermsg" style="display: none"></div>
jQuery:
$(document).ready(function()
{
if(!$("#ablockercheck").is(":visible"))
{
$("#ablockermsg").text("Please disable adblocker.").show();
}
});
「ablockercheck」は、adblockerがブロックするIDです。そのため、表示されている場合はチェックしてください。Adblockerがオンになっているかどうかを検出できます。
サイトに小さなスクリプトを追加するだけです:
var isAdsDisplayed = true;
名前で adsbygoogle.js
次に、次のようにします。
<script src="/js/adsbygoogle.js"></script>
<script>
if(window.isAdsDisplayed === undefined ) {
// AdBlock is enabled. Show message or track custom data here
}
</script>
このソリューションを見つけました ここ
AdBlockは、AdSense(ETC)JavaScriptファイルのロードをブロックしているようです。したがって、AdSense広告の非同期バージョンを使用している場合、確認できるかどうかを確認できます adsbygoogle
です Array
. 。非同期スクリプトが...非同期であるため、これは数秒後にチェックする必要があります。がここにあります 粗いアウトライン:
window.setTimeout(function(){
if(adsbygoogle instanceof Array) {
// adsbygoogle.js did not execute; probably blocked by an ad blocker
} else {
// adsbygoogle.js executed
}
}, 2000);
明確にするために、AdSenseの非同期広告コードがどのように見えるかの例を次に示します。
<!-- this can go anywhere -->
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- this is where the ads display -->
<ins class="adsbygoogle" ...></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
それに注意してください adsbygoogle
アレイとして初期化されます。 adsbygoogle.js
ライブラリはこの配列を変更します Object {push: ...}
それが実行されるとき。特定の時間の後に変数のタイプをチェックすると、スクリプトがロードされたかどうかがわかります。
私が私のサイトで使用するこのアプローチ、多分あなたはそれが役立つと思うでしょう。私の意見では、それはです 最も簡単です 解決。
Adblockerは、特定のクラスとHTML要素をブロックします。これらのセレクターが開発者コンソールでブロックされた広告のこれらのセレクターを検査することにより(すべてリストされています)、常にブロックされる要素を確認できます。
たとえば、この質問ページをStackoverFlowで検査するだけで、ブロックされた広告がたくさん表示されます。
たとえば、任意の要素 bottom-ad
クラスは自動的にブロックされます。
- 空ではないdiv要素を作成しました
bottom-ad
クラス:<div class="bottom-ad" style="width: 1px; height: 1px;">HI</div>
- ページの読み込み後、この要素が非表示になっているかどうかを確認します。 jqueryを使用しましたが、JavaScriptを自由に使用してください。
$('.bottom-ad').css('display') == "none"
または使用することでさらに良い$('.bottom-ad').is(':visible')
価値がある場合 true
, 、Adblockerはアクティブです。
余分なHTTPリクエストは必要ありません。偽の追加の高さを計算するだけです。
ちなみに、ここにあります フルリスト Adblockersがレンダリングを避ける要素を一致させる。
window.adBlockRunning = function() {
return (getComputedStyle(document.getElementById("detect"))["display"] == "none") ? true : false;
}()
console.log(window.adBlockRunning);
#detect {
height: 1px;
width: 1px;
position: absolute;
left: -999em;
top: -999em
}
<div id="detect" class="ads ad adsbox doubleclick ad-placement carbon-ads"></div>
安全な方法は、広告を内部に包むことです <div>
高さを確認してください
<div id="check-ab">
/* your ads code */
</div>
setTimeout(function(){
if(document.getElementById("check-ab").offsetHeight === 0){
console.log("ads blocked");
}
else{
console.log("ads running");
}
}, 100);
Adblock PlusおよびBluehellファイアウォールで動作します。
Adblockがあるかどうかを確認する効率的な方法:Google広告のURLをトリガーしようとすることにより、Adblockが有効になっているかどうかを確認してください。はいの場合、callback_has_adblockを実行します。そうでない場合は、callback_no_adblockを実行します。このソリューションは1つのリクエストの費用がかかりますが、少なくとも機能します。
var hasAdBlock = function (callback_has_adblock, callback_no_adblock) {
$.getScript( "http://pagead2.googlesyndication.com/pagead/show_ads.js" )
.done(function( script, textStatus ) {
callback_no_adblock();
})
.fail(function( jqxhr, settings, exception ) {
callback_has_adblock();
});
};
このソリューションは、Google AdSenseだけでなく、あらゆる種類の広告で機能します。
新しいAdSenseコードを使用する場合は、コンテンツまたはCSSチェックに頼ることなく、簡単なチェックを行うことができます。
マークアップに広告を通常のように配置します。
<ins class="adsbygoogle" style="display: block;"
data-ad-client="ca-pub-######"
data-ad-slot="#######"
data-ad-format="auto"></ins>
<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>
次に、のAdSenseコードを呼び出します 下 あなたのページの(注意してください しない 使用 "async"
電話をかけるときのフラグ adsbygoogle.js
脚本):
<script src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
次に、この小さなコードを下に追加します。
<script>
if (!adsbygoogle.loaded) {
// do something to alert the user
}
</script>
AdSenseは常にフラグを作成/設定します adsbygoogle.loaded
に true
広告がロードされたら、チェックをSettimeout関数に入れて数秒ずつチェックを遅らせることができます。
この質問の時代にもかかわらず、私は最近、それが非常に有用であると感じたので、他の人がまだそれを見ていると仮定することができます。ここや他の場所を見た後、私は広告ブロッカーを間接的に検出するための主な3つのクライアントサイドチェックがブロックされていることをチェックすることであると推測しました div
/img
, 、ブロックされています iframe
Sおよびブロックされたリソース(JavaScriptファイル)。
たぶんそれは上または妄想的ですが、選択のうち1つまたは2つだけをブロックする広告ブロッキングシステムをカバーしているため、1つのチェックのみを行った場合はカバーされていない可能性があります。
ページではチェックを実行していますadd :(私はjqueryを使用しています)
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="advertisement.js"></script>
<script type="text/javascript" src="abds.js"></script>
ページの他の場所に次の場所を追加します。
<div id="myTestAd"><img src="http://placehold.it/300x250/000000/ffffff.png&text=Advert" /></div>
私は、餌名を持つDIVを使用し、テキスト「広告」とAdSenseが使用するディメンションで外部ホストされた画像を使用しました(Placehold.itのおかげ!)。
の advertisement.js
後で確認できるドキュメントに何かを追加する必要があります。以前と同じことをしているように見えますが、実際にファイルをチェックしています(advertisement.js
)出力ではなく、それ自体がロードされています。
$(document).ready(
{
$("body").append("<div id=\"myTestAd2\">check</div>");
});
そして、すべてを組み合わせた広告ブロッカー検出スクリプト
$(document).ready(function()
{
var ifr = '<iframe id="adServer" src="http://ads.google.com/adserver/adlogger_tracker.php" width="300" height="300"></iframe>';
$("body").append(ifr);
});
$(window).on("load",function()
{
var atb = $("#myTestAd");
var atb2= $("#myTestAd2");
var ifr = $("#adServer");
setTimeout(function()
{
if( (atb.height()==0) ||
(atb.filter(":visible").length==0) ||
(atb.filter(":hidden").length>0) ||
(atb.is("hidden")) ||
(atb.css("visibility")=="hidden") ||
(atb.css("display")=="none") ||
(atb2.html()!="check") ||
(ifr.height()!=300) ||
(ifr.width()!=300) )
{
alert("You're using ad blocker you normal person, you!");
}
},500);
});
ドキュメントの場合 準備, 、つまり、マークアップがロードされ、ドキュメントにもiframeを追加します。次に、ウィンドウの場合 ロード, 、つまり、コンテンツを含む。画像などがロードされています。
- 最初のテストDivの寸法と可視性。
- 2番目のテストDIVの内容は「チェック」であることがあります。
advertimsent.js
だった いいえ ブロックされています。 - iframeの寸法(そして、隠されたオブジェクトが高さまたは幅がないので、私は可視性を推測しますか?)
そしてスタイル:
div#myTestAd, iframe#adServer
{
display: block;
position: absolute;
left: -9999px;
top: -9999px;
}
div#myTestAd2
{
display: none;
}
お役に立てれば
ほとんどのadblockerはHTTP要求をキャンセルします ads.js
そして、作ります 0px
要素の場合、しかしいつかadblockerの場合 DOMを削除しました, 、そして上記のいくつかの答えは、要素の存在をチェックしないために失敗します。
使用 setTimeout()
それがなければ、adblockerとのスクリプトレースになるので、良い練習です。
以下のスクリプトは、domが存在/削除されたかどうかを確認し、チェックします offsetHeight
それが存在する場合の要素の。
setTimeout(function() {
var a = document.querySelector('.showads'),
b = a ? (a.offsetHeight ? false : true) : true;
console.log('ads blocked?', b)
}, 200); // don't too fast or will make the result wrong.
<div class="ads showads">
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</div>
私はこれがすでに答えられていることを知っていますが、私は提案されたサンプルサイトを見ました、そして私は彼らがこのようにそれをしていると思います:
<script type="text/javascript">
if(document.getElementsByTagName("iframe").item(0) == null) {
document.write("<div style="width: 160px; height: 600px; padding-top: 280px; margin-left: 5px; border: 1px solid #666666; color: #FFF; background-color: #666; text-align:center; font-family: Maven Pro, century gothic, arial, helvetica, sans-serif; padding-left: 5px; padding-right: 5px; border-radius: 7px; font-size: 18px;">Advertising seems to be blocked by your browser.<br><br><span style="font-size: 12px;">Please notice that advertising helps us to host the project.<br><br>If you find these ads intrusive or inappropriate, please contact me.</span><br><img src="http://www.playonlinux.com/images/abp.png" alt="Adblock Plus"></div>");
};
</script>
タイムアウトやDOMスニッフィングは必要ありません。人気のある広告ネットワークからスクリプトをロードしようとするだけで、広告ブロッカーがHTTPリクエストを傍受したかどうかを確認します。
/**
* Attempt to load a script from a popular ad network. Ad blockers will intercept the HTTP request.
*
* @param {string} url
* @param {Function} cb
*/
function detectAdBlockerAsync(url, cb){
var script = document.createElement('script');
script.onerror = function(){
script.onerror = null;
document.body.removeChild(script);
cb();
}
script.src = url;
document.body.appendChild(script);
}
detectAdBlockerAsync('http://ads.pubmatic.com/AdServer/js/gshowad.js', function(){
document.body.style.background = '#c00';
});
これを解決するために私自身の「プラグイン」を作成したばかりで、それは本当にうまく機能します:
adbuddy + jsbuddy:
モバイル互換性とJSblockingの検出を追加しました...(ユーザーが無効にするように依頼するオーバーレイなど adblocking/jsblocking ソフトウェア);また、応答性の高いフレンドリーになりました。
それはその下でオープンソーリングされています コーヒーウェアライセンス.
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>var adb=true;</script>
<script src="./getbanner.cfm?"></script>
<script>
$(document).ready(function(){if(adb)alert('AdBlock!');});
</script>
getbanner.cfmファイル:
adb = false;
Adblockを検出する最も簡単な方法だと思います。
これが私のために働いたものです:
function isAdBlocked() {
return (typeof(window.google_jobrunner) === "undefined") ? true : false;
}
$(document).ready(function(){
if(isAdBlocked()) {
alert('Y U NO LIKE ADS?');
}
});
timing's
答えは考えられていますが、これ以上機能していないので、JSファイルの名前を「広告」から「AdSense」に更新しました。
これがコードです、多分これは誰かを助けるかもしれません:
<html>
<head>
<script src="/adsense.js"></script>
</head>
<body>
<script>
if( window.adblockDetecter === undefined ){
// Do anithing, adblocker detected!
alert('Adblocker Detected!');}
</script>
</body>
</html>
JSファイルにこの行だけを置きます: var adblockDetecter = true;
今、それを行うためのより良い方法があります。 アドブロック検出器
使用方法は次のとおりです。
これをあなたに追加します <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>
これで使用できます ab-message
ID AdBlockユーザーにメッセージを表示したい場合はどこでも:
<div id="ab-message" style="display: none">Your message here!</div>
元々それを隠すために追加されたインラインスタイルに注意してください(もちろん、あなた自身のCSSファイルからこれを行うこともできます)。
また、500ミリ秒かかることに注意してください。それは、Adblockerがそのことをするのを待たなければならないか、動作しないからです。
このスクリプトの仕組みについての少しの説明
まず、ランダムに生成されたリンクのソースを使用してIFRAMEを追加します。 (一部のアドブロックがスマートであるため、ランダムに生成されます。ある時点で、リンクが偽物であることに気付きます)。
次に、そのiframeで複数のチェックを実行します(正常にロードされた場合、またはスタイルが変更された場合)。これらのテストのいずれかが真である場合、それは ab-message
アドブロックユーザーへの要素。
このスクリプトは、ほとんど(すべてではないにしても)広告ブロッカーで機能します。
追加
本当に意味がありませんが、GISTを作成しただけでしたが、代わりにGitHubプロジェクトを作成しましたが、それでもそれをチェックして、それがあなたを助けたなら主演します。
Abdetector:シンプルなバニラJavaScript AdBlock Detector。
楽しみ。
あなたはそれが役立つかもしれないこれをチェックすることができますDetect-Adblocker
その実装 タイミングの答え
ヘッドタグのスクリプトの前にこれを追加します:
<head>
<title></title>
<meta/>
<!--adBlocker detection code - START-->
<script src="//adblocker.fortiapp.com/ads.js"></script>
<script>
(function (i, o, g, r) {
i[o] = (typeof i[o] == typeof undefined) ? g : r
})(window, 'adblocker', true, false);
</script>
<!--adBlocker detection code - END-->
// Other scripts
</head>
その後、後で使用します:
if (adblocker) {
// the add blocker is enabled
}else{
// ad blocker is not enabled
}
上記のすべての回答は有効ですが、ほとんどはDNSレベルの広告ブロッキングでは機能しません。
DNSレベルの広告ブロッカー( Pi-Hole)基本的には、広告ブロッキングドメインのリストにnxdomain(domainが存在しません)を返します(例:telemetry.microsoft.comは、「存在しません」)。
これを回避する方法はいくつかあります:
方法a: :ドメインではなく、IPアドレスによる広告のリクエスト。
この方法は、IPアドレスを追跡する必要があるため、少し面倒です。これは、コードが定期的に十分にメンテナンスまたは更新されていない場合に問題があります。
方法b: : ブロック 全て クライアントがnxDomainを報告している場合でも、そのフェールを要求します。
これは、「正当な」nxDomainである場合、ユーザーにとって非常に迷惑です。
私はあなたの緊張を理解しており、スクリプトまたは要素によって要素が作成されたかどうかを確認できます。また、広告ブロッキングについて話す場合、要素の存在ではなく、要素の可視性のみを期待できます。
サードパーティのスクリプトで作成された要素は、現時点でスクリプトが到達できない場合(DNSエラー、リモートWebサーバーエラー、オフラインWebページのプリロードなど)、常に誤検知になります。
チェックを含む他のすべての回答は正しいですが、これに留意してください。