最近、あるサイトにアクセスしていて、そのページに、私が AdBlocking ソフトウェアを使用していることに気付いたというセクションがあることに気付きました。どうやってそれをするのだろうと思っていましたか?クライアント側とサーバー側のどちらで行うのが最適ですか?
10 に答える
これは、サーバー側では絶対にできないことです。ドアをノックして、「私を見てください。AdblockPlus を持っています!」と言う理由はいくらでもあります。クライアント側では、adblock が積極的にページ コンテンツに影響を与えようとしています。これは、広告ブロッカーを使用していることを確認できます。
とにかく、たまたま、newgrounds.com もこれを行っていることを知りました。(彼らの新しいレイアウトは、adblock プラスのユーザーに対して台無しにされました - 応答として、彼らは最高のコンテストを行いました。
newground のソースをざっと見てみると、単純な JavaScript でこれを行っていることがわかりました。ドキュメントの最初:
var user_is_leecher = true;
次に、外部スクリプト タグがあります。src=checkabp?thisistotrickabp=***adress of ad affilliate***
冗談ですが、彼らは adblock plus を信頼して、そのスクリプトを除外します。user_is_leecher = false;
そこから、彼らは何でもできるようになります。
ここで言及されているすべての方法は、コードを削除するために広告ブロッカーに依存しています. これは、一部のアドブロッカー (Mac の NetBarrier など) では機能しません。また、広告ブロッカーが追いついたときにコードを更新し続ける必要があります.
ユーザーが広告をブロックしているかどうかを検出するには、広告 JavaScript で関数を見つけてテストするだけです。広告をブロックするためにどのような方法を使用しているかは問題ではありません。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*/
サーバー側よりもクライアント側で行う方がはるかに簡単だと思います。広告ブロッカーはクライアントにインストールされるため、DOM を操作して ajax リクエストをブロックできます。そのため、サーバーよりもクライアントで検出する方が理にかなっていると思います。
とにかく、これは広告ブロッカーが有効になっているユーザーを検出するスタンドアロンのシンプルなプラグインです。オープンソースで、完全なコードは github にあります。
https://github.com/retargetly/mockingbird
広告コンテナやポップアップにメッセージを簡単に表示できるように、よりパブリッシャー向けになっています。プラグインは頻繁に更新されるため、試してみる価値があります。これもフィドルです:
http://jsfiddle.net/retargetly/9vsha32h/
使用する必要がある唯一の方法は
mockingbird.adsBlocked(Obj)
呼び出しはコード内のどこでも実行でき、機能させるために jQuery は必要ありません。
あなたの幸運を祈ります !
いくつかの方法があると思いますが、おそらく最も簡単な方法は、広告が読み込まれたときに置き換えられる背景画像またはテキストを使用することです。したがって、広告が読み込まれると、広告が表示されます。広告が読み込まれない場合は、テキストが表示されます。
この例はクライアント側であり、JavaScript または単純な CSS で十分かもしれません。
これを実行できるサーバー側のギミックもいくつかあるかもしれませんが、それらは不必要に精巧で扱いにくいものになります。頭に浮かんだ方法の 1 つは、「IP からのユーザーはそのような画像をロードしましたか?」と尋ねることができる、広告主とのある種の API を含むことです。そしてそのようにして答えを得る。しかし、そのようなサービスがあるとは思えません。クライアント側で行う方がはるかに簡単でしょう。
これを行う簡単な方法はないと思います。あなたができることは「トラップ」を作成することです。phpスクリプトにyourdomain.com/ad.pngのような非常に明白なURLをリッスンさせます。あなたはおそらくURLの書き直しによってこれを達成することができます。このページが読み込まれると、セッション変数にこれを記録して、1x1の空白のpngを送り返すことができます。
次のリクエストで、ad.pngが読み込まれたかどうかを確認できます。そうでない場合は、クライアントが何らかの形式のAdBlockソフトウェアを使用していると推測できます。クライアントが「ad.png」をキャッシュしないように、適切なhttpヘッダーを設定してください。
これは私が現時点で考えることができる唯一のサーバー側のアプローチであり、いくつかの欠陥があります。
- pngファイルはhttpヘッダーに関係なくキャッシュできます
- これは最初のhttpリクエストでは機能しません
- ブラウザがリクエストごとにad.pngをヒットし続けるため、サーバーに余分な負荷がかかる
- 画像がサーバーから読み込まれることは、実際に表示されることを保証するものではありません。
- おそらく私が考えていなかったより多くの副作用
試してみる場合は、この投稿にコメントしてください。
クライアントサイドソリューションについて。これは難しいことではありません。ページの読み込みが完了したときに実行する小さなJavascriptを作成できます。このスクリプトは、ページに広告を保持するdomノードが含まれていることを確認できます。これを行うと、ページが完全に読み込まれたときに(domだけでなく)、広告画像の幅と高さを確認できます。このソリューションの最も明らかな欠点は、クライアントがjavascriptを無効にできることです。
ここにいくつかの良い答えがあるので、これを追加します。
いくつかの広告管理システムを使用します (独自に作成できます)。これにより、表示されているすべての広告を追跡します (そして、ads.php や showad.php などのように明確にします)。そのスクリプトが呼び出されない場合、ユーザーは何らかの形式の広告ブロック ソフトウェアを使用しています。
ただし、そのハンドラーを介してすべての広告を必ず処理してください。Mod_Rewrite は必須ではありません。単純な PHP を使用して実行できます。