広告ブロックしているユーザを簡単に判別してみる。

PC版へ 2016年04月15日

サイト制作者側が、ユーザがブラウザの広告ブロック機能を有効にしてアクセスしてきているのかどうか、こういう単純な方法でチェックしてはダメなのか。

AdBlock Plus 機能拡張や iOS のコンテンツブロック機能などは、広告を表示する外部 JavaScript コードがページに読み込まれるのをブロックする…という振る舞いをします。

ならば。

JavaScript を利用してコンテンツを表示するタイプの広告に対して「当該コードが正常に実行されたかどうか」を吟味してやれば、それだけで広告ブロック機能の検出について充分なのではないかな。

例えばページに Google AdSense コードを設置しているならば、

つまり、下記のような関数をつくっておいて、

function detectBlocker( ){
	var ad = document.getElementsByClassName( 'adsbygoogle' );
	
	if( ad.length == 0 )return;  /* AdSenseコードがページ内に存在しない */
	
	if( !ad[0].getElementsByTagName( 'IFRAME' ).length ){
		/* ifame が見つからない。つまり AdSenseコードが実行されなかった */
	
		doSomething();    /* アドブロックを検出したので何かする */
	}	
}

で、これを window の onload イベント発火時(ページ読込完了時)に呼んでやれば、

window.addEventListener('load', detectBlocker, false);

…と、これだけで、広告 / コンテンツブロックが有効かどうかを検知して、ブロックを有効にしているユーザに対して何かする、という JavaScript コードの出来上がり。

どうにもシンプルすぎるけれど、なにか問題でも?

というわけで、AdBlocker 対策スクリプトをつくってみた。

広告ブロックが有効になっていることを検知すると、ページ全面に以下のようなメッセージを表示して、記事を読みづらくします。

acb_message.png

スクリプトに関する詳しい説明は、以下からどうぞ。

とりあえず、うちのサイトの幾つかのページに設置して様子を見ています。スクリプトの動作確認と、「広告ブロックをブロックする」ことが、ウェブ制作者にとって本当に必要なものなのかを見極めるためです。

ということで、よろしくどうぞ。

関連記事

コメント

匿名

これブラウザでブロックしてる場合だけじゃなくて、対象サイトが落ちてる場合とか、PC管理者がhostsで弾いてる場合とか、ネットワーク管理者によってルータで弾かれてる場合にも反応するっぽいので、
そういう環境・状況だとエンドユーザは対処不能になって死にますね。

マルウェアばら撒いた実績のある広告ネットワークをその手の方法で停止させてる管理者はまま居そう。

匿名

現在、anti-contentBlockerの利用を検討しています。
同種のスクリプトがあまり見当たらずありがたいです。

ちょっと気になったことを1つ。
ダウンロードページなどにライセンスについての記載があった方がいいと思います。
(あったらすみません、ちょっと見つけられませんでした。)

利用する上で、コードの改変(リンクや表示内容の変更の有無など)について気にする人は多いと思います。
コードを拝見したところMITライセンスとのことで自由度が高くありがたいのですが、「無料で自由にコード改変可、商用利用OK(個人以外にも企業でもOK)、当サイトへ表記削除OK(でも削除しないでリンクしてくれるとありがたい)。ただし利用は自己責任で。」(こういうことですよね?(笑))と説明した方が、よりダウンロードされやすくなるんじゃないかと思います。(SEOの観点からも検索されやすくなるのでは。結構探すのに苦労しました。)

益々の活躍期待しております。