5

ユーザーが何らかの広告ブロッカーをインストールしている場合、広告ブロッカーはもちろん私のウェブサイトからすべての広告を削除し、広告があった場所に空のスペースを残します. AdSense JavaScript が読み込まれているかどうかを検出する必要があるため、ウェブサイトの最も重要なページへのリンクなど、他のコンテンツをその中に入れて、その空きスペースを使用したいと考えています。

これまでに試した方法:

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

と:

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

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

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

4

6 に答える 6

9

新しい AdSense コードを使用すると、コンテンツ チェックや CSS チェックに頼ることなく簡単にチェックできます。

マークアップに通常どおり広告を配置します。

<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>

次に、ページの下部にあるアドセンス コードを呼び出します (スクリプト"async"を呼び出すときにフラグを使用しないでください)。adsbygoogle.js

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

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

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

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

于 2015-03-28T19:12:34.767 に答える
4

この超軽量の方法は確実であり、すべての広告ネットワークにとらわれません。

ファイル コールads.jsをルート フォルダーに配置し、その中に次の行を追加します。

var can_run_ads = true;

Adblock は、ads.jsという名前のファイルの読み込みを許可しません。したがって、このコードを前に配置するだけです</body>

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

Adblockを削除する方法が記載されたページにユーザーをリダイレクトすることを強くお勧めします。

于 2015-08-12T23:41:20.653 に答える
3

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

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

jQueryを使用している場合は、

$(window).load(function() {
  // your checks
});
于 2011-02-19T20:37:16.960 に答える
1

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

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

于 2015-08-20T09:27:35.263 に答える
-3

さらにいくつかのテストを行った後、以前考えていたように、問題はタイミングに関するものではないことに気付きました。問題は、AdSense が新しいコードの使用を開始したことです。このコードには「google_render_ad」機能がなく、ID「google_ads_frame1」(新しい ID は「aswift_0」) の iframe が作成されません。AdSense が iframe に少なくとも 2 つの異なる ID を使用するようになったことを考慮して、ID に関係なく iframe 要素の存在のみをチェックする新しい検出コードを作成しました。

if (document.getElementsByTagName("iframe").length === 0)
{
    // ad is blocked
}
于 2011-02-20T14:57:02.093 に答える