サイト制作者側が、ユーザがブラウザの広告ブロック機能を有効にしてアクセスしてきているのかどうか、こういう単純な方法でチェックしてはダメなのか。
AdBlock Plus 機能拡張や iOS のコンテンツブロック機能などは、広告を表示する外部 JavaScript コードがページに読み込まれるのをブロックする…という振る舞いをします。
ならば。
JavaScript を利用してコンテンツを表示するタイプの広告に対して「当該コードが正常に実行されたかどうか」を吟味してやれば、それだけで広告ブロック機能の検出について充分なのではないかな。
例えばページに Google AdSense コードを設置しているならば、
- Google AdSenseコードは、スクリプトが正常に実行された場合、通常 <ins class="adsbygoogle"> 〜 </ins> という空要素内に iframe 要素や ins 要素を付加する。
- なので、ページのロードが完了した時点で、
- class属性に "adsbygoogle" を持つ要素を取得して、
- その要素が、子要素に iframe 要素を持つかどうかを調べる。
- その結果を見て、
- ifame要素が見つかった = 広告コードが正常に実行された = ユーザは広告ブロック機能を使っていない
- 見つからなかった = 広告コードが実行されていない = ユーザは広告ブロック機能を使っている
つまり、下記のような関数をつくっておいて、
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 対策スクリプトをつくってみた。
- → anti-contentBlocker.js | freefielder.jp
※ 上記リンク先のページでは、このスクリプトをオフにしています。
実動しているサンプルは こちらのページ でどうぞ。AdBlock機能を有効にしてアクセスしてみてください。
広告ブロックが有効になっていることを検知すると、ページ全面に以下のようなメッセージを表示して、記事を読みづらくします。
スクリプトに関する詳しい説明は、以下からどうぞ。
- anti-contentBlocker.js | 広告ブロックをブロック - freefielder.jp
- anti-contentBlocker.js | 設置方法 - freefielder.jp
とりあえず、うちのサイトの幾つかのページに設置して様子を見ています。スクリプトの動作確認と、「広告ブロックをブロックする」ことが、ウェブ制作者にとって本当に必要なものなのかを見極めるためです。
ということで、よろしくどうぞ。
匿名
これブラウザでブロックしてる場合だけじゃなくて、対象サイトが落ちてる場合とか、PC管理者がhostsで弾いてる場合とか、ネットワーク管理者によってルータで弾かれてる場合にも反応するっぽいので、
そういう環境・状況だとエンドユーザは対処不能になって死にますね。
マルウェアばら撒いた実績のある広告ネットワークをその手の方法で停止させてる管理者はまま居そう。
匿名
現在、anti-contentBlockerの利用を検討しています。
同種のスクリプトがあまり見当たらずありがたいです。
ちょっと気になったことを1つ。
ダウンロードページなどにライセンスについての記載があった方がいいと思います。
(あったらすみません、ちょっと見つけられませんでした。)
利用する上で、コードの改変(リンクや表示内容の変更の有無など)について気にする人は多いと思います。
コードを拝見したところMITライセンスとのことで自由度が高くありがたいのですが、「無料で自由にコード改変可、商用利用OK(個人以外にも企業でもOK)、当サイトへ表記削除OK(でも削除しないでリンクしてくれるとありがたい)。ただし利用は自己責任で。」(こういうことですよね?(笑))と説明した方が、よりダウンロードされやすくなるんじゃないかと思います。(SEOの観点からも検索されやすくなるのでは。結構探すのに苦労しました。)
益々の活躍期待しております。