Как я могу определить, заблокировано ли мое объявление AdSense? - PullRequest
3 голосов
/ 19 февраля 2011

Если у пользователя установлен какой-либо вид блокировщика рекламы, он, безусловно, удалит все объявления с моего веб-сайта и оставит пустые места, где раньше была реклама. Я хотел бы использовать это пустое пространство, поместив в него некоторое другое содержимое, например ссылки на наиболее важные страницы моего веб-сайта, для этого мне нужно определить, загружен ли AdSense javascript.

Методы, которые я пробовал до сих пор:

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

и

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

Оба из них, похоже, не работают в определенной ситуации, например, если браузер загружает файлы JavaScript AdSense немного медленнее, он будет выполнять вышеупомянутый код до загрузки кода AdSense, и я в конечном итоге скрываю рекламу для пользователей, у которых даже нет реклама заблокирована.

Есть ли у вас какие-либо предложения о том, как я могу убедиться, что мой код запускается после AdSense? Или какой-то другой способ определить, что скрипты AdSense не загружены?

Ответы [ 5 ]

6 голосов
/ 28 марта 2015

Если вы используете новый код 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>

Затем вы вызываете код AdSense в внизу вашей страницы (обратите внимание, не используйте флаг "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, чтобы задержать проверку на несколько секунд.

2 голосов
/ 19 февраля 2011

Запустите этот код для события window.onload. window.onload Событие наступает после завершения загрузки страницы.

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

Если вы используете jQuery, используйте

$(window).load(function() {
  // your checks
});
1 голос
/ 20 августа 2015

Я предлагаю вам использовать FuckAdBlock, чтобы определить, активирован ли AdBlock. Если это так, вы можете добавить на свою страницу столько html, сколько захотите.

См. Документацию для примеров: https://github.com/sitexw/FuckAdBlock

1 голос
/ 13 августа 2015

Этот сверхлегкий метод кажется непогрешимым и независимым от всех рекламных сетей.

Поместите файл вызова 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 .

0 голосов
/ 20 февраля 2011

После еще нескольких тестов я понял, что проблема не в сроках, как я думал раньше.Проблема заключалась в том, что AdSense начал использовать какой-то новый код, этот код не имеет функции "google_render_ad" и не создает iframe с идентификатором "google_ads_frame1" (новый идентификатор - "aswift_0").Учитывая, что AdSense теперь использует как минимум два разных идентификатора для фреймов, я создал новый код детектирования, который проверяет только наличие элемента фрейма независимо от его идентификатора:

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