2011-02-19 3 views
1

ユーザーが何らかの種類の広告ブロッカーをインストールしている場合、広告ブロッカーはもちろん私のウェブサイトからすべての広告を削除します。その空き領域に、AdSense JavaScriptが読み込まれているかどうかを検出する必要があるために、私のウェブサイトの最も重要なページへのリンクなど、他のコンテンツを入れてみたいと思います。私がこれまで試してみましたAdSense広告がブロックされているかどうかを検出するにはどうすればよいですか?

方法:

if (!document.getElementById("google_ads_frame1")) 
{ 
} 

と:

if (typeof(window.google_render_ad) == "undefined") 
{ 
} 

それらの両方は、ブラウザのダウンロードはJavaScriptを少し遅くファイルAdSenseの場合、たとえば、特定の状況で失敗するように見えます、 AdSenseコードが読み込まれる前に上記のコードが実行され、広告がブロックされていないユーザーに対しても広告が表示されなくなります。

AdSenseの後に自分のコードが確実に実行されるようにするにはどうすればよいですか?または、AdSenseスクリプトが読み込まれていないことを検出する他の方法はありますか?

+0

関連:http://stackoverflow.com/questions/4869154/how-to-detect-adblock-on-my-website –

答えて

2

window.onloadイベントでこのコードを実行してください。 window.onloadページの読み込みが完了すると、イベントが発生します。

window.onload = function() { 
    // your checks 
} 

あなたはjQueryのを使用している場合は、私が以前考えられていたように、その問題はタイミングではないことに気づいたいくつかのより多くのテストの後

$(window).load(function() { 
    // your checks 
}); 
+2

あなたのjQueryの例では、$ 'の省略形です(document).ready() '、これは' window.onload'の前に起動します。 jQueryを使用して '$(window).load(fn)'を介して 'window.onload'ハンドラをアタッチすることができます。 –

+0

@Dave Ward、はいはい、修正されました。ありがとう:) – Dogbert

+0

うん、それはうまく動作する、今私は質問をする前にそれを試していないために馬鹿だと感じる:) –

0

を使用しています。 AdSenseが新しいコードを使用し始めたため、このコードには「google_render_ad」機能はなく、ID「google_ads_frame1」のiframeは作成されません(新しいIDは「aswift_0」です)。

if (document.getElementsByTagName("iframe").length === 0) 
{ 
    // ad is blocked 
} 
+3

あなたがFB Like、Gplus +1または類似を使用している場合は、ページ上に多くのiframeがあります。 – Omiod

3

新しいAdSenseコードを使用している場合は、あなたが簡単に操作を行うことができますAdSenseのは、今、私は関係なく、そのIDのちょうどiframe要素の存在を確認し、新しい検出コードを作ったのiframeするために、少なくとも2つの異なるIDを使用していることを考慮すると コンテンツやCSSのチェックに頼らずにチェックしてください。あなたのマークアップで通常通り

場所広告:(adsbygoogle.jsスクリプトを呼び出す際"async"フラグを使用しないでください)

<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コードを呼び出す:

<script src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> 

次に、その下のコードのこの小さなスニペットを追加します。

<script> 
if (!adsbygoogle.loaded) { 
    // do something to alert the user 
} 
</script> 

AdSenseは、広告の読み込み時に常にadsbygoogle.loadedtrueのフラグを作成/設定します。チェックをsetTimeout関数に置くことで、チェックを数秒遅らせることができます。

+1

これはupvoted答えでなければなりません。 setTimeoutに言及してください。 setTimeoutインサイダーに '$(document).ready()'を入れる方が良いでしょう。 –

1

この超軽量の方法は間違いなく、すべての広告ネットワークには無関心です。

というファイルを呼び出します。JSあなたのルートフォルダにとは、その中に次の行を追加します。

var can_run_ads = true; 

自分好みはads.jsがロードされるという名前のファイルを許可しません。だから、私は強く自分好みを削除する方法について説明しているページにユーザーをリダイレクトすることをお勧めします</body>

<script src="/ads.js"></script> 
<script> 
if(window.can_run_ads === undefined) { 
    alert('Please Disable Adblock, ****** ******!'); 
} 
</script>'; 

前にこのコードを配置します。

1

FuckAdBlockを使用してAdBlockが有効になっているかどうかを検出することをお勧めします。このような場合は、あなたのページに必要な数のhtmlを自由に追加することができます。

例のドキュメントを参照してください:https://github.com/sitexw/FuckAdBlock

関連する問題