Я проверяю на сайте наличие AdBlock у пользователей. Для этого в скрипте Google AdSense вызываю функцию при ошибке загрузки скрипта. onerror="adBlockFunction();"
В данной функции я вместо гугловской рекламы подставляю альтернативную. Но гугловский скрипт расположен в head страницы, при этом функция adBlockFunction() должна быть определена выше него, иначе будет ошибка инициализации. При таком подходе работает только часть функции, остальные элементы не заменяются альтернативной рекламой из-за того, что не успевает подгрузиться весь DOM, т.е. например в футере замена рекламы не происходит. Как это можно доработать, чтобы было событие onerror в head, а сама функция была например в футере?
В любом случае обработчик ошибки должен быть еще до самой ошибки, т.е. до подключения AdSense.
Но вы можете сделать его совсем маленьким, только проверить что действительно реклама блочится и выставить флаг, а основное тело функции вынести вниз.
lasthero67, она объявлена внутри функции же.
Вынесите в глобальную область видимости.
И мне кажется, эта ваша adBlockFunction будет срабатывать при любой ошибке, а не только при адблоке. По хорошему, надо проверять событие ошибки и определять что именно случилось.
var adblock = false;
adBlockFunction();
function adBlockFunction() {
adblock = true; // здесь var не нужно указывать
}
console.log(adblock); // -> true
Теперь заработало, у меня изначально и стояло такое условие. Получается, что вся проблема была в том, чтобы убрать var внутри функции.
Большое спасибо за помощь.