読者です 読者をやめる 読者になる 読者になる

ku-sukeのブログ

Just another hatena blog

(追記)iOS 9のSafariの広告ブロッカーを検知するテスト

もともとPCの世界にはAdBlockというのがあって、僕も愛用しているのですが、それを良しとしないサイト運営者向けに、FxckAdBlockというJSがgithubで公開されています。

github.com

動作原理としては、存在するはずの広告枠のCSSをチェックし、隠されたりそもそも存在しているかどうかを調べ、NGなら警告を出すというものです。

 

追記:2015-09-20

--ここから--

動作原理としては、特定のclassを含む要素を作成し、CSSとして隠されているかを調べるというものでした。iOS 9のAdBlockerアプリはJSの通信をブロックするものが主流で、CSSで隠すものは少ないため、検知があまりできないようでした。

シンプルに検知するなら以下でどうかなーと思ってます。

<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script type="text/javascript">$(window).load(function(){
if(typeof window.google_ad == "undefined"){$("#header").append("<div style='color:red;'>AdBlock Detected</div>");}
if(typeof window.ga.loaded == "undefined"){$("#header").append("<img src='http://mydomain.example.com/aaaaa.php' />");}
}
);</script>

要は、ページのロード完了時点で主要なタグのオブジェクトの存在有無を確認する感じですね。

Google Adなら、window.google_adとか、GAならwindow.ga.loaded オブジェクトをtypeofして"undefined"じゃないかを調べる感じですね。

--ここまで-- 

 

このブログにはそもそも広告を入れてなかったのですが(ZenBackの下部除く)実験的に復活させてみたうえで上記のJSを導入してみました。(今はもう外しています。)

f:id:ku-suke:20150919094832p:plain

 

みなさんのAdBlockerでの検知状況に関して、@ku_sukeかこのブログのコメント欄にてご報告いただければ幸いです。

 

ちなみに、しばらくしたらうざいので消します。→消しました。)また、コードを下においておきます。

<script type="text/javascript" src="https://raw.githubusercontent.com/sitexw/FuckAdBlock/master/fuckadblock.js"></script>
<script type="text/javascript">
// Function called if AdBlock is detected
function adBlockDetected() {
$("#header").append('<div style="height:360px;background-color:red;font-size:72px;">AdBlockを検出するテスト</div>');
}

// and|or
fuckAdBlock.setOption({
debug: true
});

if(typeof fuckAdBlock === 'undefined') {
adBlockDetected();
} else {
fuckAdBlock.onDetected(adBlockDetected);
fuckAdBlock.onNotDetected(adBlockNotDetected);
// and|or
fuckAdBlock.on(true, adBlockDetected);
fuckAdBlock.on(false, adBlockNotDetected);
// and|or
fuckAdBlock.on(true, adBlockDetected).onNotDetected(adBlockNotDetected);
}
fuckAdBlock.check();
</script>